System Blueprint → Access engine (permissions)
Related documentation: Commercial Model · Permissions Catalog · Backend Core Packages · Backend Core Modules · Backend Core Addons
Permissions and Delegation Design Specification
Section titled “Permissions and Delegation Design Specification”This page defines the permission and delegation model only.
- it is not an implementation page
- it is not a route/API page
- it is not a current-state audit
- it explains how permissions should be designed regardless of current service status
It describes the intended logic for:
- company commercial eligibility
- user permissions
- scope restrictions
- delegation
1. Permission model layers
Section titled “1. Permission model layers”The platform should resolve access in layers:
Layer 1: company commercial eligibility
Section titled “Layer 1: company commercial eligibility”Question:
Did the company buy the relevant package, module, or add-on?Layer 2: user module access
Section titled “Layer 2: user module access”Question:
Is the user allowed to access that module?Layer 3: user permission access
Section titled “Layer 3: user permission access”Question:
What actions inside that module are allowed?Layer 4: scope restrictions
Section titled “Layer 4: scope restrictions”Question:
Is the user limited to a company, business unit, workflow slice, or data subset?Layer 5: delegation
Section titled “Layer 5: delegation”Question:
What can this user grant or manage for someone else?This layered model must always be preserved. One layer must not silently replace another.
2. Permission naming rules
Section titled “2. Permission naming rules”Permissions should always be namespaced by module.
Examples:
basic.artists.readbasic.events.createbasic.tasks.managefinance.expenses.readfinance.income.readfinance.bills.readmarket.contracts.readai.predictions.readvenue.availability.read
Each permission should be structured like:
<module>.<resource>.<action>Where:
module= product boundaryresource= business object or feature areaaction= read, create, update, approve, manage, export, etc.
2.1 Permission design rules
Section titled “2.1 Permission design rules”Permission names must:
- remain stable
- be meaningful to backend and frontend teams
- reflect business capability, not UI component names
- never include package names
- never include temporary pricing or campaign language
Good examples:
finance.reports.readbasic.contacts.readmarket.contracts.write
Bad examples:
basic-package-userpromo-finance-editorscreen-4-edit
3. Permission families by module
Section titled “3. Permission families by module”3.1 Basic
Section titled “3.1 Basic”Examples:
basic.artists.readbasic.artists.analyzebasic.contacts.readbasic.events.readbasic.events.createbasic.events.updatebasic.market-study.readbasic.pnl.readbasic.tasks.managebasic.news.read
3.2 Finance
Section titled “3.2 Finance”Examples:
finance.expenses.readfinance.expenses.writefinance.income.readfinance.income.writefinance.bills.readfinance.bills.writefinance.ticketing.readfinance.reports.readfinance.vendors.read
3.3 AI
Section titled “3.3 AI”Examples:
ai.predictions.readai.research.readai.valuations.readai.sales-reports.read
3.4 Touring
Section titled “3.4 Touring”Examples:
touring.routes.readtouring.routes.writetouring.logistics.managetouring.coordination.manage
3.5 Market
Section titled “3.5 Market”Examples:
market.contracts.readmarket.contracts.writemarket.escrow.readmarket.investments.read
3.6 Venue Availability
Section titled “3.6 Venue Availability”Examples:
venue.availability.readvenue.details.readvenue.details.writevenue.calendar.readvenue.calendar.writevenue.bookings.readvenue.bookings.writevenue.customers.readvenue.customers.writevenue.contracts.readvenue.contracts.writevenue.deposits.readvenue.deposits.writevenue.approvals.readvenue.approvals.approvevenue.reports.readvenue.operations.manage
4. Actions and permission semantics
Section titled “4. Actions and permission semantics”The action segment should be consistent across the platform.
Common actions:
readcreateupdatedeleteapprovemanageexportassign
4.1 Action meaning
Section titled “4.1 Action meaning”Use actions consistently:
read= can viewcreate= can create new recordsupdate= can modify existing recordsdelete= can remove or archive recordsapprove= can perform controlled approval workflowsmanage= broad administrative control over a resource familyexport= can export/report/download structured outputassign= can link or grant access to something
5. Scope restrictions
Section titled “5. Scope restrictions”Permissions alone are not always enough.
Some access must also be scoped.
Examples:
- a user can read bills but only for one business unit
- a user can read finance reports but not income details
- a user can update events only inside one operational scope
Possible scope models:
- company scope
- business-unit scope
- workflow scope
- ownership scope
Example:
User has:- finance.bills.read
Scope:- business unit = BU-X only
Result:- user can read bills- but only for BU-X5.1 Important scope rule
Section titled “5.1 Important scope rule”Scope should narrow a permission.
Scope should not create a permission that does not otherwise exist.
Bad design:
No finance permission existsbut BU scope alone gives finance accessGood design:
finance.bills.read existsscope narrows it to BU-X6. Delegation
Section titled “6. Delegation”Delegation must be documented as a separate concept from permission.
6.1 Permission
Section titled “6.1 Permission”Permission means:
What can this user do personally?6.2 Delegation
Section titled “6.2 Delegation”Delegation means:
What can this user grant or manage for someone else?6.3 Example
Section titled “6.3 Example”A manager may have:
finance.bills.readfinance.bills.write
But delegation may allow them to grant only:
finance.bills.read
and not:
finance.bills.writefinance.income.read
So a user may personally have more access than they are allowed to delegate.
7. Delegation fields
Section titled “7. Delegation fields”Delegation should conceptually control:
- grantable modules
- grantable permissions
- whether the user can manage users
- whether the user can buy or assign add-ons
- whether the user can assign access across all business units or only some scopes
Examples:
ADMIN- can grant: basic, finance- can grant permissions: finance.bills.read, finance.expenses.read- canManageUsers: true- canBuyAddons: falseMANAGER- can grant: basic- can grant permissions: basic.events.read, basic.tasks.manage- canManageUsers: false- canBuyAddons: false7.1 Delegation must never exceed personal access
Section titled “7.1 Delegation must never exceed personal access”A user must never be able to grant:
- a module they do not personally control in an allowed way
- a permission they are not allowed to delegate
- a scope broader than their own governance authority
8. Relationship to packages, modules, and add-ons
Section titled “8. Relationship to packages, modules, and add-ons”Permissions are not designed directly from package names.
Use this order:
Package / standalone module / add-on-> commercial eligibility-> module eligibility-> permission-family eligibility-> user permission grants-> scope restrictions-> delegation limits8.1 Package
Section titled “8.1 Package”Package determines what is commercially available.
8.2 Module
Section titled “8.2 Module”Module determines the permission namespace.
8.3 Add-on
Section titled “8.3 Add-on”Add-on may unlock additional capability eligibility.
8.4 Permission
Section titled “8.4 Permission”Permission determines what the user can do.
8.5 Delegation
Section titled “8.5 Delegation”Delegation determines what the user may grant or manage for someone else.
9. Finance examples
Section titled “9. Finance examples”9.1 Bills only
Section titled “9.1 Bills only”Company owns finance moduleUser gets:- finance.bills.readUser does not get:- finance.income.readResult:
- user can access bills
- user cannot access income
9.2 Bills for one business unit only
Section titled “9.2 Bills for one business unit only”Company owns finance moduleUser gets:- finance.bills.readScope:- BU-X onlyResult:
- user can access bills
- only inside BU-X
9.3 Delegation example
Section titled “9.3 Delegation example”Manager has:- finance.bills.read- finance.bills.write
Delegation:- may grant finance.bills.read onlyResult:
- manager can use write access personally
- manager cannot grant write access to other users
10. Summary
Section titled “10. Summary”The access model must stay clean:
- packages, modules, and add-ons decide commercial eligibility
- permissions decide user actions
- scope decides where those actions apply
- delegation decides what can be granted to others
These concerns must stay separate or the access model will become inconsistent very quickly.