TIL

[TIL] Spring Security 하나의 url에 두 개의 역할이 가능하도록 권한을 주고싶다

봄봄로그 2023. 10. 15. 20:09

프로젝트에 관리자 페이지를 생성하면서, 역할 admin을 을 만들었다.

admin 관리자 페이지의 url을 Security Config 클래스에서 역할을 부여한다. 

        http
               ...
                .antMatchers("/admin/**").hasRole(Role.ADMIN.name())
                .antMatchers("/api/v1/**").hasRole(Role.USER.name())
               ...

이러면 admin이 붙은 페이지들은 role이 admin인 사용자만 접근할 수 있다.

 

그런데 문제가 생겼다.

글을 삭제하거나 탈퇴하는 등 기능이 들어가있는 url을 일반사용자에게 부여해놨기 때문에 admin 계정은 해당 기능들을 쓰지 못했다;; 바보아니야...?

 

그래서 열심히 검색을 해보았는데 계층 권한이라는 Role Hierarchy 라는 것도 찾아보고 그랬는데 아무리 봐도 이렇게 까지 하지 않고 권한부여 하나를 하는데 사용하는 메소드가 있을 것 같았다..

 

        http
               ...
                .antMatchers("/admin/**").hasRole(Role.ADMIN.name())
                .antMatchers("/api/v1/**").hasAnyRole(Role.USER.name(),Role.ADMIN.name())
               ...

 

정답은 hasAnyRole 이었다 ^_^

이렇게 두개의 역할을 넣어주면 "/api/v1/**"  아래의 url은 두개의 역할에 권한이 주어진다.!!