스프링 시큐리티/실전프로젝트 - 인가 프로세스 DB 연동 웹 계층 구현

ch08. 계층 권한 적용하기- RoleHierarchy

webmaster 2022. 1. 24. 18:36
728x90

계층 관계로 설정

  • 기존에는 단순 String 권한만 있다면 권한이 있다고, 판단하였다(계층 적용 X)
     
  • RoleHierarchy
    • 상위 계층 Role은 하위 계층 Role의 자원에 접근 가능함
    • ROLE_ADMIN > ROLE_MANAGER > ROLE_USER 일 경우 ROLE_ADMIN 만 있으면 하위 ROLE ROLE의 권한을 모두 포함한다
  • RoleHierarchyVoter
    • RoleHierarchy를생성자로 받으며 이 클래스에서 설정한 규칙이 적용되어 심사함
  • RoleHierarchy 
  • @Transactional
    public void createRoleHierarchyIfNotFound(Role childRole, Role parentRole) {
    
        RoleHierarchy roleHierarchy = roleHierarchyRepository.findByChildName(parentRole.getRoleName());
        if (roleHierarchy == null) {
            roleHierarchy = RoleHierarchy.builder()
                    .childName(parentRole.getRoleName())
                    .build();
        }
        RoleHierarchy parentRoleHierarchy = roleHierarchyRepository.save(roleHierarchy);
    
        roleHierarchy = roleHierarchyRepository.findByChildName(childRole.getRoleName());
        if (roleHierarchy == null) {
            roleHierarchy = RoleHierarchy.builder()
                    .childName(childRole.getRoleName())
                    .build();
        }
    
        RoleHierarchy childRoleHierarchy = roleHierarchyRepository.save(roleHierarchy);
        childRoleHierarchy.setParentName(parentRoleHierarchy);
    }
    ROLE_HIERARCHY 테이블 데이터 추가
  • Application Loading 시점에 Role_Hierarchy를 넣어준다.
    • 권한을 조회하여 ROLE_HIERARCHY를 STring 형식으로 변환
728x90