1. Role과 권한(Privilege) 설계
Spring Security에서 Role과 Privilege는 사용자의 권한 체계를 설정하는 중요한 개념임
<a> Role과 Privilege의 차이
- Role : 사용자의 특정 역할을 나타내는 고유한 역할 명칭임. ROLE_USER, ROLE_ADMIN처럼 시스템에서 사용자를 구분할 떄 사용함. 동시에 Role은 자체적으로 권한으로 사용할 수 있지만, 보통은 Privilege를 담는 컨테이너 역할을 함
- Privilege : 역할보다 세밀한 권한으로, 개별 기능에 대한 권한을 나타냄. READ_AUTHORITY, WRITE_AUTHORITY처럼 특정 작업에 대한 허용 여부를 나타냄. Privilege는 Role에 의해 그룹화 되어 관리됨.
<b> 권한 설계 시기
권한 설계는 시스템이 어느 정도 개발된 후, 시스템의 구체적인 기능들을 기준으로 설계하는 것이 바람직함. 이렇게 하면 추상적인단계에서 권한을 상상하지 않고, 실제 필요한 권한을 바탕으로 설계할 수 있어 효율적임.
- 장점 : 구체적인 상황을 기준으로 설계를 진행할 수 있어 작업이 용이함. 실물 기반으로 설계 검증이 가능해 불확실성 줄일 수 있음.
- 단점 : Role과 권한 설계는 소스 코드, 테스트 등 시스템 전반에 영향을 미치기 때문에 작업 범위가 커지고 시간이 소요될 수 있음. 권한 설계가 늦어지면 시스템에 큰 영향을 미칠 수 있어, 적절한 시기에 설계를 진행하는 것이 중요함
2. Role과 권한(Privilege) 관계 예시
“경영지표를 확인하는 대쉬보드 시스템”
- ROLE_USER (일반 사용자): READ_AUTHORITY만을 가지고 있어, 대시보드 읽기 전용으로 접근할 수 있음
- ROLE_ADMIN (관리자): READ_AUTHORITY와 WRITE_AUTHORITY를 가지며, 사용자 및 메뉴 관리와 같은 등록, 수정, 삭제 작업을 수행할 수 있음
public enum Role {
ROLE_USER(Set.of(Authority.READ_AUTHORITY)),
ROLE_ADMIN(Set.of(Authority.READ_AUTHORITY, Authority.WRITE_AUTHORITY));
private final Set<Authority> privileges;
Role(Set<Authority> privileges) {
this.privileges = privileges;
}
}
위와 같이 Role을 정의하고, 각 Role에 필요한 Privilege를 할당하여 사용자가 대시보드를 조회하거나, 관리자만의 권한으로 메뉴와 사용자 관리 등의 기능을 수행할 수 있음
“프로젝트 공정 및 일감 관리 시스템”
- ROLE_TEMPORARY_USER: COMMUNICATION_AUTHORITY만 가지고, 메일 및 일정 관리 등의 기본 기능만 수행할 수 있음
- ROLE_USER: 관리자의 승인을 받으면 WORK_AUTHORITY와 TASK_AUTHORITY가 추가되어 공정 및 일감 관리 기능을 사용할 수 있음
- ROLE_ADMIN: 프로젝트 관리자로, CONFIG_AUTHORITY를 포함하여 프로젝트 및 사용자 관리, 메뉴 설정 등의 어드민성 기능을 수행할 수 있음
https://gregor77.github.io/2021/04/21/spring-security-02/
'기타' 카테고리의 다른 글
tar와 zip의 차이 (2) | 2024.12.06 |
---|---|
시놀로지 web station - docker 연동 (0) | 2024.12.02 |
font-size (0) | 2024.11.15 |
lazyvim (2) | 2024.11.06 |
Git Push 오류 - fatal : the remote end hung up unexpectedly (0) | 2024.10.28 |