Auth and ACL
Identity Fields
Each user has:
role:admin | editor | viewergroup: tenant grouping stringis_superuser: global capability override
Access Rules (Effective)
- Superuser
- global visibility and management
- Admin (non-superuser)
- group-scoped management
- website access by membership/ownership/group rules
- Editor
- website scope: owner or invited member
- can invite editor/viewer users on eligible websites
- Viewer
- member-only website access
- cannot create websites/jobs/cancel tasks
Ownership Constraints
- Viewers cannot own websites.
- Role downgrade to viewer is blocked when user owns websites.
Notification ACL
notification_channels: owner CRUD, superuser global CRUD.website_notifications:- requires website access
- non-superusers can only link channels they own
- superuser can link any channel/website combination
Signup Policy
AUTH_SIGNUP_ENABLED=true: signup allowedAUTH_SIGNUP_ENABLED=false: signup returns403 signup_disabled
Superuser Bootstrap
At API startup, the system ensures:
hesperida@local.meexists- password matches
SURREAL_PASS role='admin'is_superuser=true