RoleHierarchy 엔티티를 따로 만들지 않아도 되나요?
RolehierarchyImpl 에 String 타입 프로퍼티에 A > B\n
이런 타입으로 지정만 해주면 될 것 같아서 Role 엔티티 자체에 RoleGrade 라는 ENUM 타입을 지정해줘서 알파벳 순으로 가져와서 그걸 for-loop 돌리면서 문자열만 만들면 될거 같아서 해봤는데 실시간으로 적용이 되더라구요.
@Override
public void reloadRoleHierarchy() {
StringBuilder sb = new StringBuilder();
List<Role> allRoles = roleRepository.findAllWithRoleGrade();
for (int i = 0; i < allRoles.size(); i++) {
try {
allRoles.get(i + 1); /* 검증 코드 */
sb.append(allRoles.get(i).getRoleName());
sb.append(" > ");
sb.append(allRoles.get(i + 1).getRoleName());
sb.append("\n");
} catch (Exception e) {
break;
}
}
this.roleHierarchy.setHierarchy(sb.toString());
}
ResourcesController 에서 자원 등록, 삭제 하고나서 reload 메소드를 호출했듯이 이 메소드를 Role 등록, 삭제 뒤에 등록해주니 잘 되네요.
혹시 실무에서는 이런식으로 쓰는것보다 엔티티를 따로 만들어서 관리하는것을 선호하나요?
RoleHierarchy 엔티티 안에 자기 자신을 ManyToOne 으로 조인하니 너무 어려워서 이렇게 해보긴 했는데, 실무에서는 엔티티 방식으로 관리하는걸 선호하는지 궁금해서 질문드립니다.
혹시 몰라 git 링크 첨부해봅니다. 한번 봐주시면 감사하겠습니다. review4 브랜치입니다.
https://github.com/twosom/SpringSecurity-ProjectReview.git
*추가적으로 이제 계층 구조 Role을 구성했으면
Resources 랑 Role 은 굳이 N : N 관계로 구성하지 않아도(테이블 상에서는 1 : N , N : 1)
되는건가요? 기존에는 하나의 Reosurces 에 여러개의 Role 이 있을 수 있고 Role 하나가 여러 Resources 에 포함될 수 있기에 N : N 관계로 만들었지만, 계층 구조가 적용되면 외래키가 Resources 테이블에만 존재해도 (N : 1) 될 것 같아서요.
항상 좋은 강의 감사드립니다.
답변 1
3
네
RoleHierachy 엔터티가 하는 목적이 Role 의 목적에 따라 사용자별로 계층적 권한을 부여하겠다 라는 의미입니다.
그렇기 때문에 RoleHierachy 엔터티가 그 목적에 부합하도록 상위 권한과 하위권한의 개념을 담아야 하고 테이블과 매핑되도록 구성한 것입니다.
twosome 님께서 구현하신 방식도 깔끔한 처리이긴 하지만 어떤 방식으로 하는 것이 더 개발 효율성이나 관리측면에서 더 나을 것인지 판단해서 결정해야 한다고 봅니다.
그리고 RoleHierachy 엔터티로 할것인지 Role 과 RoleGrade 를 조합해서 할 것인지 판단하실 때 참고하실 것은 클래스의 역할과 책임을 할당할 떄 어떤 것을 선택하는 것이 더 클래스의 정의와 부합되는지 고려하시면 됩니다.
그리고 상위 권한의 사용자가 하위 권한의 모든 것에 접근이 가능할 수도 있지만 권한을 어떻게 설정하느냐에 따라서 상위권한이라 할지라도 일부 특수한 하위권한에는 접근이 안되도록 해야 할 수도 있습니다.
그 권한은 최상위 관리자와 하위 관리자 본인만 접근이 되어야 할 수도 있기 때문에 그렇습니다.
그럴 경우에도 N:N 이 필요하지 않는지는 한번 체크해 보시기 바랍니다.
시큐리티 공부 버전 질문
0
180
1
[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈
0
187
1
AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우
0
182
1
강의 코드가 왜이렇게 뒤죽박죽인가요...
0
257
1
메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..
0
240
1
파라미터값이 넘어가지 않습니다 ....
0
376
1
security filterChain 설정 질문이 있습니다.
0
334
1
소스 부분 질문 드립니다.
0
210
2
섹션4 7번 강의 문제가 있는거 같네요.
0
345
2
파일이 수시로 이름이 바껴있네요 ㄷㄷ
0
308
1
HttpSessionSecurityContextRepository를 사용안하는 문제
0
559
2
error , exception 이 잘 안됩니다.
0
285
2
thymeleaf tag 질문합니다.
0
198
2
버전업하면서 deprecated된 것들이 너무많아요
0
479
1
spring security 패치 관련
0
439
1
모바일을 사용할때 토큰말고 세션
0
856
2
DB 연동한 인가 부분에 대한 질문입니다!
0
265
1
Ajax방식도 똑같이 Session방식을 사용하는건가요?
0
309
1
Config 파일 생성 시 질문이 있습니다.
0
228
1
강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..
1
435
2
403 에러 뜹니다.
0
814
2
login_proc의 존재에 대한 간략한 설명입니다
0
277
1
top.html에 로그인 링크를 만들어서 로그인을 해봤습니다
0
288
2
안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!
0
192
1





