Spring Security는 “역할(Roles)”과 “일반 권한(Authorities)”을 구분하기 위해 ROLE 접두사를 붙임
Spring Security는 내부적으로 모든 권한을 GrantedAuthority로 다루는데,
그중에서도 @Secured, hasRole(), hasAnyRole() 등 “역할 기반 접근 제어”를 할 떄는,
→ ROLE 접두사가 붙은 권한만을 역할(Role)로 간주
@PreAuthorize("hasRole('ADMIN')") // 내부적으로 "ROLE_ADMIN" 검사
@PreAuthorize("hasAuthority('ADMIN')") // "ADMIN"만 검사
@PreAuthorize("hasAuthority('ROLE_ADMIN')") // "ROLE_ADMIN"만 검사

public enum Role {
USER, CHANNEL_MANAGER, ADMIN
}
// UserDetails
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return List.of(new SimpleGrantedAuthority("ROLE_" + userDto.role().name()));
}
// 추후 SecurityContext에는 ROLE_ 로 저장됨.
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
public enum Role {
USER("ROLE_USER"),
ADMIN("ROLE_ADMIN"),
MANAGER("ROLE_MANAGER");
private final String authority;
Role(String authority) {
this.authority = authority;
}
public String getAuthority() {
return authority;
}
}
// CustomUserDetailsService
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// 사용자의 역할을 Spring Security 권한으로 변환
return Collections.singletonList(
new SimpleGrantedAuthority(user.getRole().getAuthority()));
}