Security 권한관리 재문의 드립니다-2
- 작성자 :
- 박*규
- 작성일 :
- 2020-05-21 09:01:46
- 조회수 :
- 2,435
- 구분 :
- 공통컴포넌트
- 진행상태 :
- 완료
Q
답변내용이 질문의 요지에 대한 답변이 아닌것 같아 재문의 드립니다,
우선 권한계층에 ROLE_USER_A, ROLE_USER_B가 없도록 한것이 맞습니다.
계층권한에 두지 않으면 단독으로 동작한다고 말씀하셨기에 계층구조에 두지 않았습니다.
https://www.egovframe.go.kr/uss/olh/qna/QnaInqireCoUpdt.do?qaId=QA_00000000000018654&menu=5&submenu=3
ROLE_ADMIN에는 "\A.*/.*\.do.*\Z"의 ROLE이 부여된 상태에서
ROLE_USER_A에 "\A/_mng_/usr/reg/.*\.do.*\Z"의 ROLE을 부여하게 되면
ROLE_ADMIN이 "\A/_mng_/usr/reg/.*\.do.*\Z"의 ROLE에 대해 Access is Denied가 발생 하고 있습니다.
--------------------------------------------------------------------------------------------------------------------------------------------
문의내용)
권한계층 대상에서 제외한 ROLE_USER_A 또는 ROLE_USER_B 에 "web-000003" ROLE을 부여할 경우
해당 ROLE을 부여받은 권한그룹 외 Access Denied가 발생합니다.
모든자원 접근권한을 부여한 ROLE_ADMIN도 마찬가지 Access Denied가 발생하게 됩니다.
답변)
위 내용으로 볼때
ROLE_USER_A 또는 ROLE_USER_B는 "권한계층 DB 정보"없는듯 합니다.
이경우 상속받는 내용이 없기때문에 지정한 ROLE이외에는
모두 Access Denied가 발생하는게 맞습니다.
권한이 계층구조가 아니어도 적용이 가능합니다.
이 말씀의 정확한 의미는 테스트 결과와 같습니다.
즉,
계층구조로 설정하지 않아도 동작하지만
이경우는 해당 권한그룹에 지정한 규칙만으로 동작합니다.
--------------------------------------------------------------------------------------------------------------------------------------------
우선 권한계층에 ROLE_USER_A, ROLE_USER_B가 없도록 한것이 맞습니다.
계층권한에 두지 않으면 단독으로 동작한다고 말씀하셨기에 계층구조에 두지 않았습니다.
https://www.egovframe.go.kr/uss/olh/qna/QnaInqireCoUpdt.do?qaId=QA_00000000000018654&menu=5&submenu=3
ROLE_ADMIN에는 "\A.*/.*\.do.*\Z"의 ROLE이 부여된 상태에서
ROLE_USER_A에 "\A/_mng_/usr/reg/.*\.do.*\Z"의 ROLE을 부여하게 되면
ROLE_ADMIN이 "\A/_mng_/usr/reg/.*\.do.*\Z"의 ROLE에 대해 Access is Denied가 발생 하고 있습니다.
--------------------------------------------------------------------------------------------------------------------------------------------
문의내용)
권한계층 대상에서 제외한 ROLE_USER_A 또는 ROLE_USER_B 에 "web-000003" ROLE을 부여할 경우
해당 ROLE을 부여받은 권한그룹 외 Access Denied가 발생합니다.
모든자원 접근권한을 부여한 ROLE_ADMIN도 마찬가지 Access Denied가 발생하게 됩니다.
답변)
위 내용으로 볼때
ROLE_USER_A 또는 ROLE_USER_B는 "권한계층 DB 정보"없는듯 합니다.
이경우 상속받는 내용이 없기때문에 지정한 ROLE이외에는
모두 Access Denied가 발생하는게 맞습니다.
권한이 계층구조가 아니어도 적용이 가능합니다.
이 말씀의 정확한 의미는 테스트 결과와 같습니다.
즉,
계층구조로 설정하지 않아도 동작하지만
이경우는 해당 권한그룹에 지정한 규칙만으로 동작합니다.
--------------------------------------------------------------------------------------------------------------------------------------------
A
안녕하세요.
표준프레임워크센터입니다.
문의주신 내용의 요지는 여러개 권한(ROLE_USER_A , ROLE_USER_B) 을 동일한 레벨로 구성하고 싶어하시는 것 같습니다.
ROLE_ADMIN > ROLE_USER_A > ROLE_ANONYMOUS
ROLE_ADMIN > ROLE_USER_B > ROLE_ANONYMOUS
위와 같이 구성을 하시려면 RoleHierarchy 를 여러개 등록하시면 됩니다.
즉, RoleHierarchy 를 아래와같이 구성하실 수 있습니다.
(문자열로 설정시)
<egov-security:secured-object-config id="securedObjectConfig"
roleHierarchyString="
ROLE_ADMIN > ROLE_USER_A
ROLE_USER_A > ROLE_ANONYMOUS
ROLE_ADMIN > ROLE_USER_B
ROLE_USER_B > ROLE_ANONYMOUS"
(DB로 설정시 - 표준프레임워크에서 제시하는 기본설정 동일)
<egov-security:secured-object-config id="securedObjectConfig"
sqlHierarchicalRoles="
SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent
FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)"
그리고 DB로 설정시 LETTNROLES_HIERARCHY 테이블의 데이터를 아래와 같이 구성해주세요.
아래 쿼리를 실행하여 조회했을때 아래와 같은 데이터가 조회되어야 합니다.
select * from LETTNROLES_HIERARCHY
---------------------------------------------
PARNTS_ROLE | CHLDRN_ROLE
---------------------------------------------
ROLE_USER_A | ROLE_ADMIN
ROLE_USER_B | ROLE_ADMIN
ROLE_ANONYMOUS | ROLE_USER_A
ROLE_ANONYMOUS | ROLE_USER_B
또한 주의하실점은 ROLE_ADMIN에 모든 URL패턴의 권한을 부여하셨는데,
이같은 설정을 하셨을때 롤의 정렬번호를 뒤쪽으로 배치하셔야 합니다.
만약 ROLE_USER_A가 가지는 롤의 정렬번호가 모든URL패턴을 부여한 롤(관리자가 가진 롤)보다 후순위인경우
ROLE_USER_A는 모든 URL에 대해서 접근불가처리됩니다.
이상 도움이 되셨길 바라며 감사합니다.
표준프레임워크센터입니다.
문의주신 내용의 요지는 여러개 권한(ROLE_USER_A , ROLE_USER_B) 을 동일한 레벨로 구성하고 싶어하시는 것 같습니다.
ROLE_ADMIN > ROLE_USER_A > ROLE_ANONYMOUS
ROLE_ADMIN > ROLE_USER_B > ROLE_ANONYMOUS
위와 같이 구성을 하시려면 RoleHierarchy 를 여러개 등록하시면 됩니다.
즉, RoleHierarchy 를 아래와같이 구성하실 수 있습니다.
(문자열로 설정시)
<egov-security:secured-object-config id="securedObjectConfig"
roleHierarchyString="
ROLE_ADMIN > ROLE_USER_A
ROLE_USER_A > ROLE_ANONYMOUS
ROLE_ADMIN > ROLE_USER_B
ROLE_USER_B > ROLE_ANONYMOUS"
(DB로 설정시 - 표준프레임워크에서 제시하는 기본설정 동일)
<egov-security:secured-object-config id="securedObjectConfig"
sqlHierarchicalRoles="
SELECT a.CHLDRN_ROLE child, a.PARNTS_ROLE parent
FROM LETTNROLES_HIERARCHY a LEFT JOIN LETTNROLES_HIERARCHY b on (a.CHLDRN_ROLE = b.PARNTS_ROLE)"
그리고 DB로 설정시 LETTNROLES_HIERARCHY 테이블의 데이터를 아래와 같이 구성해주세요.
아래 쿼리를 실행하여 조회했을때 아래와 같은 데이터가 조회되어야 합니다.
select * from LETTNROLES_HIERARCHY
---------------------------------------------
PARNTS_ROLE | CHLDRN_ROLE
---------------------------------------------
ROLE_USER_A | ROLE_ADMIN
ROLE_USER_B | ROLE_ADMIN
ROLE_ANONYMOUS | ROLE_USER_A
ROLE_ANONYMOUS | ROLE_USER_B
또한 주의하실점은 ROLE_ADMIN에 모든 URL패턴의 권한을 부여하셨는데,
이같은 설정을 하셨을때 롤의 정렬번호를 뒤쪽으로 배치하셔야 합니다.
만약 ROLE_USER_A가 가지는 롤의 정렬번호가 모든URL패턴을 부여한 롤(관리자가 가진 롤)보다 후순위인경우
ROLE_USER_A는 모든 URL에 대해서 접근불가처리됩니다.
이상 도움이 되셨길 바라며 감사합니다.