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
B00UserListcó nhóm hệ thống<Everyone>vớiId = 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
| RoleType | Role Name | Mô tả vai trò |
|---|---|---|
| 1 | Administrator | Truy cập không hạn chế toàn bộ chức năng và dữ liệu |
| 2 | User | Truy cập các chức năng và dữ liệu không bị cấm |
| 3 | Limited User | Ngườ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 |
| 4 | Group Moderator | Quả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 |
| 5 | Layout Designer | Có thể tạo mới và sửa đổi các thiết kế layout |
| 6 | Database Designer | Có thể sửa đổi cấu trúc dữ liệu |
| 7 | Restricted Execution | Bị hạn chế — cần được cho phép để thực hiện các lệnh |
| 10 | Restricted Command | Khi đă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 |
| 11 | History Viewer | Quyền xem nhật ký sử dụng của những người dùng khác |
| 12 | Backup Operator | Quyề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ượng | Chi tiết |
|---|---|
| Lệnh chức năng | Cá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ệu | Control nhập liệu, cột grid… khai báo trong layout |
| Layout | Các layout trong B00Layout |
| Dữ liệu | Cấ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ền | Bị 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ới | Không cho phép thao tác tương ứng |
| Mở dữ liệu của người khác | Vẫ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ác | Tương tự với thao tác sửa |
| Kế thừa | Tí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ómGROUP1bị cấm mở bảngTABLE1. Dù A được phân quyền mởTABLE1thì 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ấp | Ví dụ |
|---|---|
| Cấp 1 | Cho phép mở form phiếu thu — CommandKey = PT |
| Cấp 2 | Khô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
AdministratorvàLayout Designermớ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ống | Kết quả |
|---|---|
| Không có quyền thêm mới / sửa | Control ở trạng thái ReadOnly = True |
| Không có quyền xem | Control 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 thu | DocCode='PT' |
| Phiếu chi | DocCode='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ảng | Ai được thêm/sửa/xóa khi không có quyền cấm |
|---|---|
Bảng B00* | Chỉ Administrator |
B00Layout | Administrator + Layout Designer |
B00UserList | Role 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ác | Tất cả role trừ Limited User đều có mọi quyền nếu không bị cấm |
Riêng
Limited UserCó 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ặc0hoặ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.
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ản1111thì 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óm | Nội dung |
|---|---|
| Đơn vị cơ sở | Các đơn vị trong bảng B00Branch |
| Màn hình chính | Các layout trong B00Layout có FormName = MainWindow |
| Hiển thị dữ liệu | Các command Explorer |
| Cập nhật dữ liệu | Các command Editor |
| Báo cáo | Các command Reporter |
| Chức năng | Các command còn lại |
| Truy vấn dữ liệu | Phân quyền truy vấn dữ liệu |
| Ứng dụng điện thoại | Phân quyền app mobile |
Bốn tab dữ liệu phân quyền liên quan
| Tab | Nội dung |
|---|---|
| Lệnh chức năng | Các lệnh thực hiện trong form |
| Control | Chi tiết từng ô, từng cột, từng nút bấm trên form |
| Layout | Sử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