Permission Model¶
Mica enforces permissions on three layers:
- Role-level — visible modules and action buttons
- Field-level — which fields are visible for a given user
- Row-level — which business records a user is allowed to see
Cerbos policies¶
Field-level rules are evaluated through the Cerbos sidecar. Policy files live in:
deploy/cerbos-policies/
Cerbos can hot-reload policy changes without requiring a full application restart.
Row-level access (v1.21.0+)¶
Row-level rules are enforced in backend/app/core/scoping.py:
| Tier | Roles | PR scope | Downstream records | RFQ / Invoice |
|---|---|---|---|---|
| Full | admin / procurement_mgr / it_buyer / finance_auditor | All | All | All |
| Department | dept_manager | Own department | Linked to own department's PRs | Hidden |
| Personal | requester | Own only | Linked to own PRs | Hidden |
Downstream records (PO, Contract, Shipment, Payment, Invoice, DeliveryPlan) derive visibility through entity.po_id → PO.pr_id → visible PRs.
Administration guidance¶
- keep role design stable and predictable
- treat finance and supplier-related fields as sensitive by default
- regression-test key workflows after permission changes
requesteris the minimum-privilege role for general business staff; assignit_buyerto staff who need full visibility