2.5 KiB
2.5 KiB
Role Definitions
Purpose
Define each role available in IGNY8, what it can access, and where those permissions are enforced.
Code Locations (exact paths)
- Role field:
backend/igny8_core/auth/models.py(User.role) - Permission classes:
backend/igny8_core/auth/permissions.py(IsOwnerOrAdmin,IsEditorOrAbove,IsViewerOrAbove,AccountPermission) - Frontend guards:
frontend/src/App.tsx(ProtectedRoute,ModuleGuard),frontend/src/store/authStore.ts(role persisted in state)
Roles and Capabilities (backend-enforced)
developer: Treated as admin-level for debugging; passes owner/admin checks.owner: Full tenant control (users, billing, plans, sites, automation).admin: Nearly full control; same as owner for most modules except potential business policy differences (not differentiated in code).editor: Can create/update planner/writer/automation configs; cannot perform owner/admin-only billing or team admin actions.viewer: Read-only access whereIsViewerOrAboveis applied; cannot mutate resources.system_bot: Reserved for system automation; not typically used via UI; expected to bypass some checks when invoked server-side (still scoped to account).
Enforcement Points
- DRF permissions: Applied per view/action using classes above; combined with account/site/sector scoping from base viewsets.
- Middleware:
AccountContextMiddlewaremust setrequest.accountand reject inactive accounts before permissions run. - Site scoping: For non-admins,
SiteUserAccesslimits visible sites inSiteViewSet.
Cross-Module Impact
- Planner/Writer/Automation:
IsEditorOrAbovegates writes; viewers read only. - Billing: owner/admin (and developer) expected for invoices/payments/plan changes; editors/viewers not permitted to mutate.
- Integration: editor+ for connect/test/sync; viewer may read status where allowed.
- System settings: owner/admin for account/system settings; others limited.
Tenancy Rules
- Roles operate within the resolved
request.account; there is no cross-tenant role scope. API key flows bypass user roles but remain account-scoped.
How Developers Should Work With This Module
- When adding a new endpoint, pick the minimal role needed and reuse existing permission classes.
- If introducing finer-grained roles, extend
permissions.pycentrally and updateModuleGuardto mirror backend expectations. - Keep
User.rolevalues consistent; avoid hardcoding role strings outside permission helpers.