728x90
반응형
SMALL
안녕하세요! 😊 오늘은 개발에서 역할(Role)과 권한(Privilege) 관리에 대해 이야기해볼게요. 이 개념은 특히 사용자 인증 및 권한 부여(Authorization) 시스템을 설계할 때 매우 중요하답니다. 조금 복잡할 수 있지만, 예시와 함께 설명할 테니 차근차근 따라와 주세요! 🚀
역할(Role)과 권한(Privilege)이란?
1️⃣ 역할(Role)
- 역할은 사용자의 직무, 책임, 혹은 위치에 따라 정의된 "집합적인 권한"입니다.
- 예를 들어, 회사의 시스템에서 "관리자(Admin)", "일반 사용자(User)", "슈퍼 관리자(Super Admin)" 등의 역할이 있겠죠.
- 역할은 단순히 권한의 묶음으로 볼 수 있어요.
2️⃣ 권한(Privilege)
- 권한은 특정 작업(행위)에 대한 접근 권한을 의미합니다.
- 예를 들어, "데이터 읽기(Read)", "데이터 쓰기(Write)", "데이터 삭제(Delete)" 같은 권한이 있어요.
- 사용자가 가진 역할에 따라 권한이 부여됩니다.
🔑 역할과 권한의 관계
역할은 권한을 포함하며, 사용자는 하나 이상의 역할을 가질 수 있습니다. 이 관계는 아래처럼 이해할 수 있어요.
- 역할: "Admin"
- 권한: "사용자 생성(Create User)", "데이터 삭제(Delete Data)", "로그 조회(View Logs)"
- 역할: "User"
- 권한: "데이터 조회(View Data)"
왜 역할과 권한을 나누어 관리해야 할까요?
- 유지보수성:
역할을 통해 권한을 묶으면, 개별 사용자에게 직접 권한을 부여할 필요가 없어 관리가 편리해요.
예를 들어, 새 직원이 "일반 사용자"라면 "User" 역할만 부여하면 끝! - 보안성:
사용자의 역할과 권한을 명확히 구분하면, 권한 오용이나 데이터 손실을 방지할 수 있어요. - 확장성:
새로운 역할이나 권한이 필요할 때 기존 구조를 쉽게 확장할 수 있어요.
간단한 예시: 블로그 시스템
1️⃣ 역할 정의
- Admin: 블로그 관리
- Editor: 블로그 작성 및 편집
- Viewer: 블로그 읽기만 가능
2️⃣ 권한 정의
- Create Post: 새 블로그 작성
- Edit Post: 블로그 편집
- Delete Post: 블로그 삭제
- View Post: 블로그 읽기
3️⃣ 역할-권한 매핑
Role | 권한 |
---|---|
Admin | Create Post, Edit Post, Delete Post, View Post |
Editor | Create Post, Edit Post, View Post |
Viewer | View Post |
코드로 표현하기
아래는 역할과 권한을 간단히 정의하고 매핑하는 Python 예시입니다.
# 권한 정의
privileges = {
"create_post": "Create Post",
"edit_post": "Edit Post",
"delete_post": "Delete Post",
"view_post": "View Post"
}
# 역할 정의
roles = {
"Admin": [privileges["create_post"], privileges["edit_post"], privileges["delete_post"], privileges["view_post"]],
"Editor": [privileges["create_post"], privileges["edit_post"], privileges["view_post"]],
"Viewer": [privileges["view_post"]]
}
# 사용자에게 역할 부여
user_roles = {
"Alice": ["Admin"],
"Bob": ["Editor"],
"Charlie": ["Viewer"]
}
# 사용자가 특정 권한을 가지는지 확인
def has_privilege(user, privilege):
user_privileges = []
for role in user_roles.get(user, []):
user_privileges.extend(roles.get(role, []))
return privilege in user_privileges
# 테스트
print(has_privilege("Alice", "Create Post")) # True
print(has_privilege("Charlie", "Edit Post")) # False
정리 🙋♀️
- 역할(Role): 권한의 묶음. 사용자의 직무나 책임을 반영.
- 권한(Privilege): 특정 작업에 대한 접근 권한.
- 장점: 유지보수 편리, 보안 강화, 확장성 높음.
728x90
반응형
SMALL
'데이터베이스 > DB 필수지식!' 카테고리의 다른 글
초보자를 위한 데이터베이스 설계 핵심: Primary Key와 Foreign Key 쉽게 배우기 - 코드카인 티스토리 (0) | 2024.12.31 |
---|---|
SNS 설계도? ER 다이어그램으로 데이터 관계 쉽게 이해하기 - 코드카인 티스토리 (0) | 2024.12.31 |
당신의 DB가 엉망진창인 이유? 정규화를 모르면 답이 없다! - 코드카인 티스토리 (0) | 2024.12.23 |
데이터베이스와 친구 되기! PL/SQL로 자동화의 세계를 열다 - 코드카인 티스토리 (0) | 2024.12.20 |
[데이터베이스] RDBMS와 NoSQL의 차이점 완벽 정리: 개념, 장단점, 사용 사례와 예제 코드 (0) | 2024.12.18 |