Overview
SuperTokens Core provides a flexible role-based access control (RBAC) system that supports:- Hierarchical role and permission structure
- Multi-tenant role assignments
- Role inheritance across user pool
- Bulk role operations
Core Concepts
Roles vs Permissions
Roles
Named collections of permissions (e.g., “admin”, “editor”, “viewer”)
Permissions
Granular access rights (e.g., “user:read”, “post:write”, “admin:delete”)
Storage Architecture
From io/supertokens/userroles/UserRoles.java:46-51:Roles are stored in the public tenant storage (app-level), while role-to-user mappings are stored in each tenant’s storage. This allows roles to be shared across all tenants in an app.
Creating Roles
From io/supertokens/userroles/UserRoles.java:124-161:Example: Create Role with Permissions
Assigning Roles to Users
From io/supertokens/userroles/UserRoles.java:41-60:Example: Assign Roles
Bulk Role Assignment
From io/supertokens/userroles/UserRoles.java:62-109: For bulk imports and batch operations:Example: Bulk Assignment
Retrieving User Roles
From io/supertokens/userroles/UserRoles.java:223-226:Example: Get User’s Roles
Managing Permissions
Get Permissions for Role
From io/supertokens/userroles/UserRoles.java:257-270:Example: Check User Permissions
Delete Permissions from Role
From io/supertokens/userroles/UserRoles.java:280-308:Removing Roles
Remove Role from User
From io/supertokens/userroles/UserRoles.java:187-211:Remove All Roles from User
From io/supertokens/userroles/UserRoles.java:374-378:Delete Role Completely
From io/supertokens/userroles/UserRoles.java:336-353: Deletes role and all user associations across all tenants:Querying Roles
List All Roles
From io/supertokens/userroles/UserRoles.java:362-365:Get Users with Role
From io/supertokens/userroles/UserRoles.java:236-247:Get Roles with Permission
From io/supertokens/userroles/UserRoles.java:320-325:Multi-Tenant Role Management
Tenant-Scoped Role Assignment
Roles are defined at the app level but assigned at the tenant level. The same role name has the same permissions across all tenants.
Permission Naming Conventions
Recommended Format
user:read- Read user datauser:write- Create/update usersuser:delete- Delete userspost:read- View postspost:write- Create/edit postspost:delete- Delete postsadmin:access- Access admin panelbilling:manage- Manage billing
Hierarchical Permissions
Complete Example
Best Practices
Pre-Create Roles
Create all roles before assigning them to users
Use Descriptive Names
Role names should clearly indicate their purpose
Follow Least Privilege
Grant minimum permissions necessary for each role
Document Permissions
Maintain a list of all permissions and their meanings
Regular Audits
Periodically review role assignments and permissions
Tenant Isolation
Remember roles are app-wide but assignments are per-tenant