2024. 2. 29. 19:49ㆍSpring
왓슈 플젝에서 클럽별 롤을 다르게 부여하고 싶다.
Security는 로그인 직후의 유저 정보를 Authentication 객체에 담아 ContextHolder에서 관리한다.
나는 URL을 타고 들어오는 Club id에 속하는 해당 유저의 롤을 기반으로 메서드 접근을 관리하고 싶다.
여기서 고민인 지점이 생긴 것이다.
특정 메서드에 권한을 url 을 타고 들어오는 클럽 아이디별 유저의 롤에 따라 부여하고 싶은데,
ContextHolder 에서는 로그인 직후의 유저 정보를 반영하고 있다.
1. api가 호출될 때 마다 Authentication 객체를 수정하는건 오바라는 생각. 가능 하기나 한지 몰겠다.
2. @preAuthorized에 들어가는 매개변수를 변수로 설정할 수 있나? -> 클럽에 따른 역할 인식이 가능해짐.
1) user detail에서 유저가 속한 모든 클럽별 role을 부여.
ex) ROLE_(클럽번호)ADMIN
2) 어노테이션 preauthorized의 hasRole 메서드에서 PathVariable을 통해 들어온 클럽에서의 역할과 원하는 역할의 일치여부 확인.
ChatGPT5에 PreAuthorize에 변수를 적용 할 수 있다는 사실을 알게 되었다.
변수를 적용할 수 있게 되면, 클럽별 + 역할 을 인식할 수 있게 되고, 클럽별로 유저의 권한을 인식하여 api호출 권한을 부여할 수 있게 된다.
2)번의 생각을 적용하여
유저가 클럽별로 가진 모든 권한을 clubId + role 형식으로 userdetails를 통해 인지할 수 있게 수정하였다.
이와같이 12번 클럽에서의 openAttendance 메서드를 호출 할 때, 유저가 12번 클럽에서 'MANAGER'라는 권한을 갖고 있는지 확인하고 있다.