Chuyển tới nội dung chính
Phiên bản: 1.1

Phân quyền Arkon — tra cứu đầy đủ

Hai khái niệm nền: Employee.global_role là enum cố định (viewer | contributor | knowledge_manager | admin) + tư cách thành viên EmployeeDepartment (một người thuộc nhiều dept; zero-dept chỉ thấy global). Quyền có format {resource}:{action}:{scope} với own_dept vs all.

Bảng role

RoleQuyền cốt lõi (ROLE_PERMISSIONS_MAP)Là ai
viewerdoc/wiki/skill:read:own_dept, org:departments:read, org:employees:readĐọc tri thức trong dept mình + global
contributorviewer + doc:create:own_dept, wiki:write:own_dept, skill:create:own_deptUpload tài liệu, propose draft Wiki/skill
knowledge_managerdoc/wiki/skill:*:all + skill:contribution:review + org:departments:read/manage, org:employees:read/manage, org:audit:readDuyệt nội dung toàn hệ thống, quản category và department
adminALL_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ệu global (SOP/chính sách chung).
  • Out-of-scope chỉ lộ tên scope, không lộ tiêu đề/nội dung.
Đừng cấu hình theo tài liệu Workspace cũ

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
owneradminToàn quyền
adminknowledge_managerwiki:write:all — duyệt draft, merge/close nhánh, rollback
membercontributorwiki:write:own_dept — đề xuất, không duyệt
viewerviewerChỉ đọ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.

CẤM nâng 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 draft cần wiki: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.