PrintUp — Tài liệu yêu cầu & nghiệm thu Baseline đề xuất · brief v2026-09-16 (16/09/2026)

Quyền & phân quyền

Permission matrix v1.0 cho PrintUp P0 sau implementation freeze; authorization enforce tại API/server.

1. Nguyên tắc

Matrix này là implementation baseline v1.0. Guest là trạng thái chưa xác thực, không phải role: guest chỉ browse catalog, cấu hình sản phẩm và giữ cart cục bộ; mọi checkout/order/account data yêu cầu account đã xác thực.

Các invariant:

  1. Chỉ một Production Approver active tại một thời điểm.
  2. Chỉ Production Approver được approve fileapprove production.
  3. Admin gán/thay Production Approver nhưng không tự có quyền approve nếu chưa được gán role đó.
  4. Accounting xác nhận/manual-reconcile payment, ghi refund execution, invoice và payout; Sales/Production không tự xác nhận tiền.
  5. Mọi account có thể apply Agent; chỉ Admin approve/reject/suspend.
  6. Management mặc định read-only.
  7. Authorization kiểm tại API/server, không dựa vào việc ẩn nút UI.
  8. Action nhạy cảm phải audit actor/time/action/target/reason và before-after khi phù hợp.

2. Ký hiệu

  • Own: chỉ dữ liệu của account.
  • R: read.
  • RW: read/write theo state rule.
  • A: approval/gate action.
  • Admin: quản trị cấu hình/quyền.
  • Request: gửi yêu cầu, không tự thực thi.
  • : không có quyền mặc định.

3. Permission matrix v1.0

Tài nguyên / hành động Customer Agent Sales Production Production Approver Accounting Admin Management
Profile cá nhân/doanh nghiệp Own RW Own RW R R R RW R
Address/contact Own RW Own RW R R khi fulfilment R R RW R
Cart Own RW Own RW R support
Order Own R; RW/cancel trước payment Own R + referral scope RW theo state R R R RW theo state R
Cancel/change sau payment Request Request Request R A/RW R
Refund amount/decision Request Request R A/RW R
Refund execution/reference Own R R RW/A R R
Catalog/product/variant R R R R R R Admin R
Pricing config/margin/promo R R R R Admin R
Floor override one-off Request R A R
Manual quote Own R/Accept Own R/Accept RW R R RW R
Public design URL Own RW trước lock R R RW note R
File checklist result Own R R R RW/A R R
Approve file A
Production order/ticket Own status R R RW RW R RW R
Approve production A
QC/Rework/Scrap record Own status R R RW RW R RW R
Payment/SePay Own R R R R RW R R
Manual payment reconciliation RW/A R R
Invoice info trước Issued Own RW R RW R R
Invoice Issued/adjustment ref/status Own R R RW R R
Shipment/tracking/status Own R R RW RW R RW R
Agent application Own Own R R R
Agent approve/reject/suspend R A R
Referral attribution Own R Own R R R RW correction trước lock R
Commission Own R R RW R R
Monthly payout batch Own R RW/A R R
Notification delivery log Own R Own R R R R R RW/support R
Internal user activation/role Admin R
Gán Production Approver Admin R
Report tổng hợp Own Own scope R R R R R R
Yêu cầu xóa account/data Request Request RW process
Soft-delete business data Admin
Hard purge Admin + strong confirm

4. Ràng buộc kỹ thuật

  • Reassign Production Approver phải atomic hoặc có cơ chế tương đương để không tồn tại hai approver active.
  • File approval và production approval là hai action riêng dù cùng một người thực hiện.
  • Production approval chỉ được phép khi payment = Paid và active design version = Approved.
  • Manual SePay reconciliation lưu actor, time, source transaction, target order, amount và reason.
  • Floor override chỉ one-off manual quote/order, không có global bypass flag.
  • Admin quyết refund amount; Accounting ghi execution/reference sau khi chuyển tiền bên ngoài.
  • Customer/business/account/address/order/invoice data lịch sử dùng snapshot phù hợp để profile update không rewrite history.
  • Soft-delete là mặc định; hard purge không cascade audit record của delete.
  • Internal user bị disable phải mất quyền truy cập và long-lived session theo auth implementation hiện hành.

5. Thay đổi sau freeze

Matrix có thể được version hóa khi tổ chức thay đổi, nhưng thay đổi quyền nhạy cảm phải có regression test RBAC. Việc một người kiêm nhiều role được phép nếu Admin gán rõ; ví dụ Admin có thể đồng thời được gán Production Approver, nhưng quyền approve đến từ role Production Approver chứ không từ Admin.