Engine phân quyền runtime: rt_role (grants JSONB: module/group/feature/action + field + rule-predicate + deny), resolve thuần có test được, rt_permission_epoch invalidate cache, guard requirePermission + accessor row-filter.
| Thành phần | Vai trò |
|---|---|
| rt_role · rt_role_assignment · rt_permission_epoch | 3 bảng — một nguồn sự thật grants; epoch bump khi sửa quyền |
| resolve.js | Merge grants (inherits ≤2 tầng, deny-wins, OR rule) — hàm thuần, unit-test không cần DB |
| guard.js · predicate.js | requirePermission (opt-in) + buildWhere an toàn (parametrized, field allowlist) |
| authorize.js | Hybrid UNION CP-cache + engine — giai đoạn chuyển tiếp RT-14 |
| Tham chiếu | Khuyến nghị |
|---|---|
| Casbin/OPA — single authority | Chạy plan data-scope P1→P5, pilot module student; sau RT-16 gỡ nhánh CP-cache trong authorize.js — một chỗ duy nhất trả lời 'ai được làm gì thấy gì' |
| Odoo record rules | Giữ nguyên hướng rule-predicate trong rt_role (đúng mô hình Odoo ir.rule) — chính sách theo trung tâm nằm ở data, không ở manifest |
| Test bất biến | resolve.js là hàm thuần — bổ sung bộ test property (deny thắng allow mọi thứ tự, union không mất quyền) trước khi di cư role thật |
Core không phải module nghiệp vụ — thay ma trận vai trò bằng tác nhân × năng lực, kèm cơ chế/quyền gate từng năng lực. R đọc · W thực hiện · A duyệt.
| Năng lực | Cơ chế / quyền gate | SUPER | OWNER/QTHT | DEV | SVC | USER |
|---|---|---|---|---|---|---|
| CRUD rt_role (grants/rule) | iam.administration.role-admin | — | W | — | — | — |
| Gán role (rt_role_assignment) | iam.administration.role-admin | — | W | — | — | — |
| Bump epoch khi đổi quyền | tự động trong transaction | — | — | — | W | — |
| Resolve + enforce mỗi request | middleware requirePermission/scopeWhere | — | — | — | W | — |
| Sync role từ CP (origin=cp) | Bearer service | — | — | — | W | — |
SUPER = super admin CP · OWNER/QTHT = chủ workspace / quản trị WS · DEV = developer/publisher · SVC = service-to-service (runtime/hook) · USER = người dùng cuối. Mục ghi (đích) = theo khuyến nghị P1–P5, chưa có ở hiện trạng.