Catalog quyền ở CP: Module/App → FeatureGroup → Feature → Permission + Role/RoleGroup gán theo user × workspace; export contract opengate-rbac-export/v1 cho runtime ingest.
| Thành phần | Vai trò |
|---|---|
| Module · App · FeatureGroup · Feature · Permission | Catalog quyền 4 cấp — nguồn khai từ manifest module |
| Role · RoleGroup · rbacService | Bó quyền, gán user theo workspace |
| rbacExportService | Xuất RBAC per-workspace → JSON contract cho RT ingest (service-to-service Bearer) |
| RT phía nhận | rt_role với origin='cp' (sync replace ghi đè) vs origin='local' (sống sót qua pull) |
key.group.feature.action — nhất quánauthorize.js — đúng cho giai đoạn chuyển tiếp nhưng khó suy luận quyền| Tham chiếu | Khuyến nghị |
|---|---|
| Casbin / OPA — một policy store duy nhất | Hoàn tất RT-16: engine (rt_role) làm authority duy nhất ở runtime; CP chỉ là nguồn sync + UI quản trị. Gỡ nhánh UNION trong authorize.js khi di cư xong |
| Odoo record rules | Nối data scope theo plan-data-scope đã viết (grant kind:rule → buildWhere) — pilot module student |
| AWS IAM | Thêm policy simulator nhỏ: màn hình admin nhập user + permission code → trả allow/deny + lý do (role nào cấp) — cứu debug phân quyền rất nhiều |
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 |
|---|---|---|---|---|---|---|
| Catalog permission (từ manifest) | sync tự động khi cài module | R | — | — | W (sync) | — |
| Role / RoleGroup per workspace | quyền quản trị WS trên CP | W | W | — | — | — |
| Gán role cho member | membership + quyền quản trị | — | W | — | — | — |
| Export RBAC → runtime | Bearer service-to-service | — | — | — | R | — |
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.