Phân quyền Arkon — tra cứu đầy đủ
Hai khái niệm nền:
Employee.global_rolelà enum cố định (viewer|contributor|knowledge_manager|admin) + tư cách thành viênEmployeeDepartment(một người thuộc nhiều dept; zero-dept chỉ thấyglobal). Quyền có format{resource}:{action}:{scope}vớiown_deptvsall.
Bảng role
| Role | Quyền cốt lõi (ROLE_PERMISSIONS_MAP) | Là ai |
|---|---|---|
viewer | doc/wiki/skill:read:own_dept, org:departments:read, org:employees:read | Đọc tri thức trong dept mình + global |
contributor | viewer + doc:create:own_dept, wiki:write:own_dept, skill:create:own_dept | Upload tài liệu, propose draft Wiki/skill |
knowledge_manager | doc/wiki/skill:*:all + skill:contribution:review + org:departments:read/manage, org:employees:read/manage, org:audit:read | Duyệt nội dung toàn hệ thống, quản category và department |
admin | ALL_PERMISSIONS (bypass mọi check) | Quản trị hệ thống |
Chưa gán role mặc định: doc:read/create:own_dept, wiki:read/write:own_dept, skill:read:own_dept,
org:departments:read.
Scope Department vs Global
Department: cô lập theo phòng ban (HR, Legal, Engineering…). Không có hàng liên kết department = tài liệuglobal(SOP/chính sách chung).- Out-of-scope chỉ lộ tên scope, không lộ tiêu đề/nội dung.
Tài liệu Arkon cũ còn mô tả Workspace realm + routers/projects.py, nhưng code hiện tại không còn —
thực tế dùng Department / Global scope.
Map Space → Arkon (AGENTBOARD_ARKON_RBAC_SYNC)
| Role Space (Board) | global_role Arkon | Được gì ở Arkon |
|---|---|---|
owner | admin | Toàn quyền |
admin | knowledge_manager | wiki:write:all — duyệt draft, merge/close nhánh, rollback |
member | contributor | wiki:write:own_dept — đề xuất, không duyệt |
viewer | viewer | Chỉ đọc |
Mọi thao tác tri thức đi qua hai cổng, cả hai phải mở: cổng Board (AUTHZ_RULES theo
space_members — xem Phân quyền Board) và cổng Arkon (quyền theo
global_role ở bảng trên).
Hệ quả thực tế: 403 từ Arkon nổi lên ở Board thành 502 kèm nguyên văn detail của
Arkon. Thấy 502 mà detail nói về quyền → đó là cổng thứ hai, không phải Arkon sập.
role='admin' Arkon để "cho chạy"role là role hệ thống Arkon: role='admin' làm bộ lọc department trả về rỗng, tài
khoản đó đọc wiki mọi Space khác — vỡ cách ly Space. Cách sửa đúng là cấp quyền
(wiki:write:all qua global_role), không bao giờ nâng role.
Ngưỡng viết vs duyệt
propose draftcầnwiki:write:*(contributor làm được).- Direct edit / approve cần
wiki:write:all(chỉ manager/admin) — contributor không tự duyệt bài mình.
MCP token scope
Token HMAC-SHA256, verify mỗi request (đổi role/dept/revoke hiệu lực ngay, không cache).
MCP_TOKEN_PEPPER bắt buộc. User tự phục vụ ở Profile → McpTokenCard; admin cấp/thu hồi ở Employees
(POST/DELETE /api/employees/{id}/token).
Chi tiết dùng: Board ↔ Wiki, Skills & MCP.