Tìm hiểu về Phân quyền

Phạm vi áp dụng

✅ Bravo 8 · ✅ Bravo 10

Permission dùng để phân quyền việc truy cập, xem, cập nhật dữ liệu đối với từng User, nhóm User hoặc Role.

Chỉ người dùng với vai trò quản trị mới được phép khai báo phân quyền.

1. Các khái niệm

Khái niệmĐịnh nghĩa
Người dùng (User)Người đăng nhập, lưu trong B00UserList với IsGroup = False
Nhóm người dùng (User Group)Nhóm chứa nhiều nhóm con hoặc người dùng, lưu trong B00UserList với IsGroup = True (nhóm không được đăng nhập)
Vai trò (User Role)Vai trò một người dùng có thể đảm nhận — một người dùng có thể có nhiều role. Lưu trong B00RoleList

Nhóm đặc biệt <Everyone>

Trong B00UserList có nhóm hệ thống <Everyone> với Id = 1, ParentId = -1 — dùng để phân quyền cho tất cả nhóm/người dùng khác.

2. Các Role hệ thống

RoleTypeRole NameMô tả vai trò
1AdministratorTruy cập không hạn chế toàn bộ chức năng và dữ liệu
2UserTruy cập các chức năng và dữ liệu không bị cấm
3Limited UserNgười dùng hạn chế — cần được cho phép để truy cập dữ liệu của người dùng khác
4Group ModeratorQuản trị nhóm — có thể thêm, sửa, cấp, rút quyền cho người dùng cùng nhóm trong phạm vi quyền được cấp
5Layout DesignerCó thể tạo mới và sửa đổi các thiết kế layout
6Database DesignerCó thể sửa đổi cấu trúc dữ liệu
7Restricted ExecutionBị hạn chế — cần được cho phép để thực hiện các lệnh
10Restricted CommandKhi đăng nhập chỉ tải các command có quyền cho phép. Các lệnh tác vụ như CloseWindow, New, Edit, Open, Refresh… không thuộc phạm vi này
11History ViewerQuyền xem nhật ký sử dụng của những người dùng khác
12Backup OperatorQuyền sao lưu cơ sở dữ liệu

Chương trình cho phép tạo các role mới tùy ý (RoleType = 0).

3. Đối tượng phân quyền

Đối tượngChi tiết
Lệnh chức năngCác lệnh trong B00Command, phân 2 cấp:
• Cấp 1 — phạm vi toàn bộ chương trình
• Cấp 2 — chỉ trong form của lệnh cấp 1
Control dữ liệuControl nhập liệu, cột grid… khai báo trong layout
LayoutCác layout trong B00Layout
Dữ liệuCấp toàn bộ bảng và cấp các dòng dữ liệu

4. Các quyền hạn

QuyềnÁp dụng cho
Thêm mới (AddNew)Layout, dữ liệu, control
Sửa (Edit)Layout, dữ liệu, control
Xóa (Delete)Layout, dữ liệu
Khôi phục (Recall)Layout, dữ liệu
Mở (Open)Layout, dữ liệu, lệnh chức năng
Xem (Display)Control, lệnh chức năng

Ý nghĩa

QuyềnBị cấm thì sao?
Hiển thịKhông nhìn thấy chức năng trong chương trình
MởVẫn nhìn thấy nhưng không truy cập vào được
Sửa / Xóa / Khôi phục / Thêm mớiKhông cho phép thao tác tương ứng
Mở dữ liệu của người khácVẫn mở được dữ liệu của mình, không mở được dữ liệu do người dùng khác tạo ra
Sửa dữ liệu của người khácTương tự với thao tác sửa
Kế thừaTích “Không kế thừa” → người dùng không bị ảnh hưởng bởi quyền đã phân cho cả nhóm

5. Hai nguyên tắc cốt lõi

Thừa kế quyền

Một người dùng ngoài quyền của chính mình còn được thừa kế:

  • Quyền từ mọi cấp nhóm mà mình nằm trong
  • Quyền từ mọi role của bản thân
  • Quyền từ các role của các cấp nhóm mà mình nằm trong

Nguyên tắc ưu tiên quyền cấm

Chương trình luôn ưu tiên quyền cấm, theo thứ tự:

vai trò → quyền của nhóm → quyền cá nhân

Ví dụ: người dùng A thuộc nhóm GROUP1, nhóm GROUP1 bị cấm mở bảng TABLE1. Dù A được phân quyền mở TABLE1 thì chương trình vẫn cấm A mở bảng đó.

6. Sáu phương pháp phân quyền

6.1. Phân quyền theo vai trò ⭐ (khuyến nghị)

Cách làm tốt nhất

Nên phân quyền cho các role rồi gán role cho nhóm/người dùng.

Ví dụ: để cho phép sửa đổi danh mục → tạo role “Cập nhật danh mục” → phân quyền cho role → gán role cho nhóm/người dùng.

Như vậy việc rút quyền hoặc thay đổi quyền sau này rất linh hoạt và nhanh chóng.

6.2. Phân quyền lệnh chức năng

Đây là cách đơn giản nhất. Các lệnh trong B00Command được truy cập từ menu, toolbar và các thành phần giao diện.

CấpVí dụ
Cấp 1Cho phép mở form phiếu thu — CommandKey = PT
Cấp 2Không cho phép lệnh in — CommandKey = Print trong form phiếu thu

Phạm vi của lệnh cấp 2

Cấm lệnh in cấp 2 thì đối tượng vẫn có quyền in ở các form khác. Lệnh in cũng có ở nhóm chức năng như một lệnh cấp 1 — phân quyền cho lệnh in cấp 1 sẽ có tác dụng trong toàn bộ chương trình.

Ngầm định

Khi không có phân quyền cấm thì tất cả các role đều được phép thực hiện và xem các lệnh.

Giới hạn

Phân quyền theo lệnh chỉ mang tính chất cục bộ từng form, không giải quyết được nhu cầu phân quyền toàn cục.

Ví dụ: cấm mở form “Hóa đơn” nhưng khi mở form “Danh mục đối tượng” vẫn xem được tab “Hóa đơn bán hàng”, tìm bằng lookup hóa đơn thì danh sách vẫn hiển thị → cần phân quyền dữ liệu.

Từ 4.2.0: cho phép phân quyền nhóm lệnh IsGroup = True trong B00Command — tạo command Group và chỉ phân quyền cho command mẹ để có tác dụng với tất cả command con.

6.3. Phân quyền layout

Ngầm định

Khi không có phân quyền cấm thì chỉ role Administrator và Layout Designer mới được quyền thêm/sửa/xóa layout. Các role khác phải được phân quyền cho phép.

Chương trình cho phép phân quyền cho từng layout riêng lẻ.

Từ 4.2.1.0: hỗ trợ phân quyền cho SubLayout.

Warning

Với màn hình vừa có Layout mẫu in vừa có mẫu là Sub thì cần chuyển hết về khai báo dạng SubLayout — hiện chưa hỗ trợ phân quyền trong trường hợp hỗn hợp.

6.4. Phân quyền các control dữ liệu

Với textbox, cột grid, cột báo cáo, explorer… chương trình cho phép phân quyền thêm mới, sửa, xem.

Tình huốngKết quả
Không có quyền thêm mới / sửaControl ở trạng thái ReadOnly = True
Không có quyền xemControl không hiển thị nội dung

Ngầm định

Mọi người dùng (kể cả người dùng không có role nào) đều có mọi quyền hạn với control dữ liệu.

→ Xem thêm ApplyOwnerCommandPermission (Bravo 10)

6.5. Phân quyền dữ liệu ⭐ (mạnh nhất)

Phân quyền cho toàn bộ bảng hay các dòng của bảng.

Phạm vi toàn cục

Quyền hạn của dữ liệu có phạm vi toàn cục — bất kỳ form nào truy xuất dữ liệu đều bị ảnh hưởng.

Trường hợp bảng dùng chung: phiếu thu, phiếu chi, báo có, báo nợ… dùng chung B30AccDoc. Trước khi thay đổi quyền cần khai báo biểu thức phân biệt:

Chứng từBiểu thức
Phiếu thuDocCode='PT'
Phiếu chiDocCode='PC'

Nếu không khai báo thì quyền hạn sẽ có tác dụng cho toàn bộ các chứng từ.

Phân quyền theo từng dòng: khai báo thêm Id= trong biểu thức.

Quy tắc ngầm định với bảng hệ thống

BảngAi được thêm/sửa/xóa khi không có quyền cấm
Bảng B00*Chỉ Administrator
B00LayoutAdministrator + Layout Designer
B00UserListRole khác Administrator chỉ được mở, sửa thông tin của chính mình (không được thay đổi nhóm, đình chỉ, kích hoạt).
Group Moderator chỉ có quyền với nhóm mình điều hành
Bảng dữ liệu khácTất cả role trừ Limited User đều có mọi quyền nếu không bị cấm

Riêng Limited User

Có thể thêm dữ liệu mới (nếu không bị cấm), và chỉ được mở, sửa, đình chỉ, khôi phục với dữ liệu không thuộc người dùng khác tạo ra — dựa vào CreatedBy = Id của bản thân hoặc 0 hoặc -1.

6.6. Phân quyền màn hình Dashboard

Từ ver 4.2.2.0: hỗ trợ phân quyền các thành phần trên Dashboard — Diagram, Widget, Reporter.

→ Widget Dashboard

7. Trường hợp loại trừ

Quan trọng

Tất cả mọi quyền hạn với dữ liệu đều bị BỎ QUA, không áp dụng khi kiểm tra giá trị và lên dữ liệu báo cáo.

Ví dụ: người dùng không có quyền mở tài khoản 1111, nhưng nếu thêm mới tài khoản 1111 thì vẫn bị báo lỗi “tài khoản đã tồn tại”.

8. Panel các mục phân quyền

NhómNội dung
Đơn vị cơ sởCác đơn vị trong bảng B00Branch
Màn hình chínhCác layout trong B00Layout có FormName = MainWindow
Hiển thị dữ liệuCác command Explorer
Cập nhật dữ liệuCác command Editor
Báo cáoCác command Reporter
Chức năngCác command còn lại
Truy vấn dữ liệuPhân quyền truy vấn dữ liệu
Ứng dụng điện thoạiPhân quyền app mobile

Bốn tab dữ liệu phân quyền liên quan

TabNội dung
Lệnh chức năngCác lệnh thực hiện trong form
ControlChi tiết từng ô, từng cột, từng nút bấm trên form
LayoutSửa, xóa các layout của Explorer, Editor, Reporter
Dữ liệuĐến từng bảng với điều kiện khai báo — bất cứ form nào truy xuất đến đều bị ảnh hưởng

Liên quan

B00 - Bảng hệ thống · Tích hợp đăng nhập bằng User Windows · MainWindow · BravoPasswordPolicyValidator · Trạng thái control