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

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

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.