Skip to main content
The NCT Hub platform implements a sophisticated role-based access control (RBAC) system with granular workspace-scoped permissions designed for club management, member roles, and department-specific access control.

Permission Architecture

Permission System

Available Permissions

The platform defines 30+ workspace permissions organized into groups:

Infrastructure

  • manage_infrastructure_settings - Manage infrastructure-level settings

Workspace

  • manage_workspace_settings - Manage workspace configuration
  • manage_workspace_security - Manage security settings

Users

  • manage_users - Create, update, delete users
  • manage_user_groups - Manage user groups and tags
  • manage_user_roles - Assign and modify user roles
  • view_disabled_users - View disabled user accounts
  • disable_user - Disable/enable user accounts

Finance

  • manage_finance - Manage financial resources
  • ai_lab_assistant - Access AI lab features

Calendar

  • manage_calendar - Manage calendar events
  • manage_external_users - Manage external/guest users

Content

  • manage_documents - Manage document resources

Inventory

  • manage_inventory - Manage inventory resources

Permission Groups

Defined in @ncthub/utils/permissions:

Database Schema

workspace_role_permissions

workspace_members

Checking Permissions

Server-Side Permission Check

Usage in Server Actions

Usage in API Routes

Check Multiple Permissions

Permission Utilities

Get User Permissions

Get User Role

Assigning Permissions

Create Role with Permissions

Assign Role to User

Client-Side Permission Checks

usePermissions Hook

Usage

Conditional Rendering

Usage:

Common Permission Patterns

Admin Check

Owner Check

Member Check

Permission Middleware

Create reusable permission middleware for API routes:
Usage:

Best Practices

✅ DO

  1. Always check permissions server-side
  2. Use granular permissions
  3. Check permissions before operations
  4. Return appropriate HTTP status codes
  5. Cache permission checks when appropriate

❌ DON’T

  1. Don’t rely only on client-side permission checks
  2. Don’t expose permission logic in URLs
  3. Don’t hard-code permission checks
  4. Don’t skip permission checks for “trusted” operations

External Resources