Tư tưởng: Anh là ai (user), anh có những vai trò gì (user-role). Ngoài quyền theo các vai trò của mình, anh còn có những đặc quyền gì (user-permission)
P(U) = P(RU) + P(PU) = P(Ri) + P(Rj) + Pi + Pj = Pri + Prj + Pi + Pj
Có nhiều cách phân quyền cho người dùng, không phải lúc nào cũng nên tạo ra role mới với các quyền mong muốn rồi chỉ việc gán role đó cho user.
Thay vì như vậy, trong một số trường hợp, có thể sử dụng 1 role làm nền (base) rồi kết hợp gán thêm đặc quyền cho người dùng.
Cụ thể nếu hệ thống có nhiều người có chung một tập quyền thì mới nên tạo role. Còn như trường hợp Trưởng nhóm = nhân viên + vài đặc quyền, mà hệ thống chỉ có 1 trưởng nhóm thì không cần sinh ra role Trưởng nhóm làm gì cả!
Với cách tổ chức phân quyền cho người dùng như trên có vẻ đã ngon rồi.
Tuy nhiên, nếu hệ thống yêu cầu đáp ứng khả năng phân quyền như dưới đây:
- Các nhân viên FBI có thể bị kỷ luật. Có nhiều hình thức kỷ luật. Với mỗi hình thức kỷ luật, nhân viên sẽ bị tước một số quyền vốn có nhất định của vai trò nhân viên:
+ Không được truy cập vào hồ sơ X
+ Không được bắn súng trong phòng
thì chúng ta nên làm thế nào?
->
- Cách 1: Với mỗi hình thức kỷ luật tạo ra 1 role tương ứng, ví dụ Nhân viên nát, Nhân viên quá đát, Nhân viên hư, Nhân viên máu chiến rồi gán tập quyền đã co nhỏ
+ Ưu điểm: Dễ dàng lấy được những ai đang bị kỷ luật và theo hình thức gì
+ Nhược điểm: Phải tạo nhiều role
- Cách 2: Trong quan hệ user-permission thêm một thông tin cho biết là "được cấp quyền" hay "bị cấm quyền". Mặc định là "được cấp quyền". Khi đó với nhân viên bị kỷ luật theo hình thức X thì ta chỉ cần thay đổi thông tin "bị cấm PX" trong user-permission.
+ Ưu điểm: Ko phải tạo nhiều role, hạn chế/thu hồi quyền nhanh
+ Nhược điểm: Khi kiểm tra quyền phải xử lý loằng ngoằng hơn một chút (cấm > cấp > vai trò)
Ví dụ về một số bản ghi dữ liệu mẫu:
Bảng user:
(id, name) = (1, 'huypv')
Bảng role:
(id, name, description) = (1, 'News Manager', 'Quản trị tin tức'), (2, 'Song Manager', 'Quản trị bài hát'), (3, 'Game Manager', 'Quản trị game')
Bảng permission:
(id, name, description) = (1, 'add_news', 'Thêm tin'), (2, 'edit_news', 'Sửa tin'), (3, 'delete_news', 'Xóa tin'), (4, 'kiss_you', 'Đặc quyền của riêng mình anh :-w')
Bảng role_permission:
(role_id, perm_id) = (1, 1), (1, 2), (1, 3)
Bảng user_role:
(user_id, role_id) = (1, 1)
Bảng user_
permission:
(user_id, perm_id) = (1, 4)
Title:
Cách thức tổ chức phân quyền người dùng
Description:
Tư tưởng: Anh là ai (user), anh có những vai trò gì (user-role). Ngoài quyền theo các vai trò của mình, anh còn có những đặc quyền gì (user-...
...
Rating:
4