Skip to main content

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”)
Relationship: A role contains multiple permissions. A user can have multiple roles.

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:
Deleting a role removes it from all users across all tenants in the app. This operation cannot be undone.

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

Examples:
  • user:read - Read user data
  • user:write - Create/update users
  • user:delete - Delete users
  • post:read - View posts
  • post:write - Create/edit posts
  • post:delete - Delete posts
  • admin:access - Access admin panel
  • billing: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

Common Patterns

Check Permission Helper

Role Inheritance