Giao diện
Phân quyền
Cloudflare Access quyết định ai vào được. Bảng users quyết định họ làm được gì.
Bốn vai trò
| Vai trò | Mô hình chuẩn | Đánh giá của Brand | Ghi chú |
|---|---|---|---|
architect | ✅ Sửa | ✅ Mọi Brand | Enterprise Architect |
executive | ❌ Chỉ xem | ✅ Mọi Brand | CEO / Chiến lược |
brand_owner | ❌ Chỉ xem | ✅ Brand của mình | Chủ Brand |
viewer | ❌ | ❌ | Mặc định cho người chưa được cấp vai trò |
PRD gốc mô tả bảy vai trò (thêm Capability Owner, Process Owner, Technology/Data Owner). Ba vai trò đó gắn với tầng Process và Application; hiện tại chúng được ghi bằng trường owner dạng văn bản trên từng đánh giá, quy trình, sản phẩm, feature và yêu cầu, chưa phải một vai trò đăng nhập riêng. Ba mặt phẳng của Conan1 dùng chung bốn vai trò này — không có vai trò mới.
Quyền theo mặt phẳng
| Mặt phẳng | Tài nguyên | Ai được ghi |
|---|---|---|
| Compass | mô hình chuẩn, applications, data-entities, technologies | architect |
| Compass | đánh giá, processes, value-streams, initiatives, objectives, key-results | architect, executive, brand_owner đúng Brand |
| Products | products, features | architect, executive, brand_owner đúng Brand (canEditScope) |
| Products | application-urls | architect |
| Products | product-capabilities | architect, executive |
| Requirements | requirements, questions, decisions, evidence, releases, mọi endpoint riêng (trả lời, quyết, gợi ý AI, dải Liên quan) | chỉ architect |
Mặt phẳng Requirements là bộ nhớ quyết định của tổ chức, nên chỉ kiến trúc sư được ghi; executive và brand_owner đọc được toàn bộ. decided_by và answered_by luôn là email lấy từ Cloudflare Access — Worker đóng dấu, body không thể đặt.
Chế độ Xem / Sửa
Ngoài vai trò, giao diện còn có một công tắc Xem | Sửa ở góc trên bên phải, cạnh công tắc ngôn ngữ.
- Mặc định luôn là Xem. Mỗi lần tải trang đều bắt đầu ở chế độ này — trạng thái không được ghi nhớ.
- Ở chế độ Xem, mọi nút thêm, icon bút chì, nút kích hoạt và nút xoá đều biến mất trên toàn bộ màn hình. Người dùng chỉ đọc và bấm vào từng mục để xem chi tiết.
- Người có vai trò
viewerkhông nhìn thấy công tắc, vì họ không có gì để bật.
Cơ chế này được cài ở tầng store: canEditModel, canEditBrand() và canEditScope đều nhân thêm điều kiện editMode. Nhờ vậy một màn hình mới tự động tuân theo chế độ mà không cần viết thêm dòng nào — miễn là nó hỏi quyền qua ba cờ đó thay vì tự kiểm tra vai trò.
Vì sao mặc định chỉ đọc
Compass chủ yếu được dùng để đọc — xem bản đồ năng lực, tìm điểm yếu, chuẩn bị cho một cuộc họp. Sửa là việc hiếm và có chủ đích. Mặc định chỉ đọc giữ màn hình sạch và tránh sửa nhầm khi đang trình bày.
Cưỡng chế ở đâu
Quyền được kiểm tra ở Worker, không phải ở giao diện. Giao diện chỉ ẩn nút cho gọn; API vẫn trả 403 nếu ai đó gọi thẳng.
Công tắc Xem/Sửa cũng chỉ là giao diện — nó không phải một lớp bảo mật, mà là một lớp an toàn khi thao tác.
- Sửa mô hình chuẩn → yêu cầu
architect. - Sửa đánh giá →
architect,executive, hoặcbrand_ownerđúng Brand. - Sửa sản phẩm, feature → cùng quy tắc với đánh giá; Worker tự điền
brand_idtừ bản ghi cha trước khi kiểm tra quyền, nênbrand_ownerkhông gắn được feature vào sản phẩm của Brand khác. - Ghi yêu cầu, câu hỏi, quyết định, bằng chứng, release → chỉ
architect.
Thêm người dùng
sql
INSERT INTO users (email, name, role, brand_id)
VALUES ('nguoi@vidu.com', 'Tên', 'brand_owner', 'BRD-nemo12');Người này còn phải nằm trong policy của Cloudflare Access, nếu không sẽ không vào được tới Worker.