Chuyển tới nội dung chính

Phân quyền Board

Tra cứu ma trận quyền theo role Space cho từng endpoint Board, từ xem tới approve, cùng cách quản lý thành viên khi cần.

Nguyên tắc nền: role chỉ đến từ bảng space_members. Không header nào, không token nào nâng quyền được. Không có bản ghi membership → 403, kể cả GET.

viewer < member < admin < owner

Ma trận quyền theo hành động​

Hành độngAPIQuyền tối thiểuRàng buộc thêm
Xem Space, task, wiki, plan, groupGET /api/…viewer
Tạo / sửa / xoá taskPOST·PATCH·DELETE /api/tasks*member
Tạo task hàng loạtPOST /api/tasks/batchmemberKiểm quyền ở mọi Space được tham chiếu
Chạy / dừng agentPOST /api/tasks/:id/run·stopmember
Tạo & sửa kế hoạchPOST·PATCH /api/plans*memberRiêng route theo id (GET·PATCH /api/plans/:id, POST /api/plans/:id/regenerate-branch) giải Space từ plan-draft (plans:read-by-id / plans:write-by-id) — vá rò F1: trước đây chúng rơi về rule field-optional không có projectId nên "optional" thành không scope, đọc/sửa được plan Space khác
Apply PlanPOST /api/plans/:id/applymemberGiải Space từ plan-draft
Tạo / chạy Task GroupPOST /api/groups*member
Ghi Wiki draftPOST /api/wiki/draftsmemberScope field — thiếu Space là fail-closed, không "Space nào cũng được"
Duyệt / từ chối Wiki draftPOST /api/wiki/drafts/:id/approve·rejectadmin⚠️ human only
Hợp nhất / đóng nhánh WikiPOST /api/wiki/branches/:id/merge·closeadmin⚠️ human only — merge một nhánh là duyệt mọi draft trong đó
Rollback trang WikiPOST /api/wiki/pages/:slug/revisions/:v/rollbackadmin⚠️ human only — ghi lại trang đã duyệt trong một lời gọi; Arkon đòi thêm wiki:write:all
Duyệt hai cổng MRPPOST /api/sources/:id/approve-extraction, …/plan/approve·reject·regenerateadmin⚠️ human only — duyệt extraction tiêu token AI; duyệt plan quyết định gì vào wiki
Nạp tài liệuPOST /api/sources/upload·url (+ GET /api/sources*)member (ghi) / viewer (đọc)Cần cờ AGENTBOARD_ARKON_SOURCES=1; scope ghi là field
Cờ tính năngGET /api/features(chỉ cần đăng nhập)source:none — không scope Space, chỉ trả boolean
Approve & MergePOST /api/tasks/:id/approveadmin⚠️ Bắt buộc actor.type === 'human'
Request Changes / ReworkPOST /api/tasks/:id/reworkadmin⚠️ Bắt buộc actor.type === 'human'
Sửa cấu hình SpacePATCH·DELETE /api/projects/:idowner
Thêm / xoá thành viênPOST·DELETE /api/spaces/:id/membersownerKhông xoá được owner cuối cùng (409)
Tạo Space mớiPOST /api/projects(chỉ cần đăng nhập)Người tạo tự động thành owner
Route chưa khai báo trong AUTHZ_RULES → 403

Mặc định là chặn, không phải cho qua. Thêm endpoint mới mà quên khai báo rule là endpoint đó không dùng được — đây là chủ ý.

Quản lý thành viên​

# Xem danh sách
curl http://<host>/api/spaces/<spaceId>/members

# Thêm / đổi role
curl -X POST http://<host>/api/spaces/<spaceId>/members \
-H 'Content-Type: application/json' \
-d '{"email":"bob@corp.com","role":"member"}'

# Xoá
curl -X DELETE http://<host>/api/spaces/<spaceId>/members/bob@corp.com

Mất hết quyền quản trị? Đặt AGENTBOARD_BOOTSTRAP_OWNERS=you@corp.com rồi restart server. Lệnh grant là idempotent — vừa là đường khởi tạo lần đầu, vừa là đường break-glass. Chi tiết: Tạo Space & quản thành viên.

Vì sao approve cần human?​

Xem Vì sao Human Gate không bypass được.