Skip to content

RBAC & Permissions โ€‹

Four-tier role hierarchy across platform admin and fund-scoped access.

Roles โ€‹

๐Ÿ”’ Super Admin โ€” Platform owner โ€‹

  • Panel: /admin ยท Scope: All pools, all funds, all settings
  • Auth: Email + Password (backend-only creation, 1 account per platform)
  • Exclusive powers: invite/remove Admins, platform config, signing method defaults

๐Ÿ‘‘ Admin โ€” Full platform control โ€‹

  • Panel: /admin ยท Scope: All pools, all funds
  • Auth: Google OAuth (invited by Super Admin)
  • Can do: create/delete pools, approve redemptions (final), pool pause, invite Operators/FMs, notifications

โš™๏ธ Operator โ€” Day-to-day operations โ€‹

  • Panel: /admin ยท Scope: All pools (page-level permissions, granted by Super Admin or Admin)
  • Auth: Google OAuth (invited by Super Admin or Admin)
  • Can do: process deposits, record yield, edit pool details, propose redemptions (not approve), audit log

๐Ÿ“ Fund Manager โ€” Fund-scoped operations โ€‹

  • Panel: /fund-admin ยท Scope: Own fund(s) only
  • Auth: Google OAuth (invited by Admin)
  • Can do: approve/reject deposits (own fund), issue LP (FUND_ISSUED), configure yield, manage fund members

โš™๏ธ Operator Page-Level Permissions

Operator permissions are page-level, controlled via admin_user_permissions table. Available page_keys: 'dashboard', 'deposits', 'redemptions', 'yield', 'pools', 'kyc', 'funds'. Super Admins and Admins have full access (no permission records needed). Fund Managers see only their assigned fund's pools and related data.

Permission Matrix โ€‹

Platform & Settings โ€‹

Action๐Ÿ”’ Super Admin๐Ÿ‘‘ Adminโš™๏ธ Operator๐Ÿ“ Fund Mgr
View admin dashboardโœ“โœ“โœ“โ€”
View audit logโœ“โœ“โœ“โ€”
Configure platform settingsโœ“โ€”โ€”โ€”
Configure notificationsโœ“โœ“โ€”โ€”
Invite / remove Adminโœ“โ€”โ€”โ€”
Invite / remove Operatorโœ“โœ“โ€”โ€”
Invite / remove Fund Managerโœ“โœ“โ€”โ€”
Export CSV (all data)โœ“โœ“โœ“โ€”

Pool Management โ€‹

Action๐Ÿ”’ Super Admin๐Ÿ‘‘ Adminโš™๏ธ Operator๐Ÿ“ Fund Mgr
Create poolโœ“โœ“โ€”โ€”
Edit pool configโœ“โœ“โœ“ (granted)โ€”
Deploy poolโœ“โœ“โ€”โ€”
Delete / Archive poolโœ“โœ“โ€”โ€”
Pause / unpauseโœ“โœ“โ€”โ€”
Toggle investment_blockedโœ“โœ“โ€”โ€”
Transfer to wallet (AS_POOL)โœ“โœ“โ€”โ€”
Set signing methodโœ“โœ“โ€”โ€”
View NAV & oracle statusโœ“โœ“โœ“Own fund

Fund Management โ€‹

Action๐Ÿ”’ Super Admin๐Ÿ‘‘ Adminโš™๏ธ Operator๐Ÿ“ Fund Mgr
Create fundโœ“โœ“โ€”โ€”
Edit fund detailsโœ“โœ“โœ“โ€”
Delete fundโœ“โœ“โ€”โ€”
Set fund statusโœ“โœ“โ€”โ€”
Add/remove fund membersโœ“โœ“โ€”โœ“ (own fund)
View fund dashboardโœ“โœ“โœ“Own fund
Export fund CSVโœ“โœ“โœ“Own fund

Deposits & LP โ€‹

Action๐Ÿ”’ Super Admin๐Ÿ‘‘ Adminโš™๏ธ Operator๐Ÿ“ Fund Mgr
View investment queueโœ“โœ“โœ“โ€”
Verify LP (FUND_ISSUED)โœ“โœ“โœ“โ€”
Process deposits, manage reserve splitsโœ“โœ“โœ“โ€”
Mint LP tokens (PLATFORM_ISSUED)โœ“โœ“โœ“โ€”

Redemptions โ€‹

Action๐Ÿ”’ Super Admin๐Ÿ‘‘ Adminโš™๏ธ Operator๐Ÿ“ Fund Mgr
View redemption queueโœ“โœ“โœ“Own fund
Approve redemption (reserve check + payout)โœ“โœ“โ€”โ€”
Fund redemption shortfallโœ“โœ“โ€”โ€”
Reject redemptionโœ“โœ“โ€”โ€”
Co-sign transfer (multi-sig, AS_POOL)โœ“โœ“โœ“ (with role)โ€”
Co-sign transfer (multi-sig, FUND_POOL)โ€”โ€”โ€”โœ“ (FM + FM)

Yield & Distribution โ€‹

Action๐Ÿ”’ Super Admin๐Ÿ‘‘ Adminโš™๏ธ Operator๐Ÿ“ Fund Mgr
Record yield distributionโœ“โœ“โœ“ (granted)Own fund
Retry failed distributionโœ“โœ“โœ“ (granted)โ€”
View yield claimsโœ“โœ“โœ“Own fund
Configure yield settingsโœ“โœ“โœ“ (granted)Own fund
Toggle allow_rolloverโœ“โœ“โ€”โ€”

Auth & Route Protection โ€‹

๐Ÿ” Authentication

Super Admin: Email + password login. Account created via backend only (DB seed or internal API). Password change via backend only. 1 account per platform.

Admin / Operator / Fund Manager: Google OAuth (email matched against admin_users.email). Invited via email with invite_code. On first login, Google OAuth account is linked.

wallet_address is optional for all roles โ€” used only for on-chain operations, not for authentication. Role check on route load via GET /api/auth/role. 30-minute session timeout.

๐Ÿ—„ Database Tables

admin_users โ€” All roles (email, role, auth_method, password_hash, is_active)

  • auth_method: 'PASSWORD' (Super Admin) or 'GOOGLE_OAUTH' (others)
  • password_hash: bcrypt hash, Super Admin only

admin_user_permissions โ€” Operator page-level permissions

fund_members โ€” Fund Manager roles (fund_id, admin_user_id scope, is_primary)

Admin Invite Flow โ€‹

โ‘  Super Admin invites Admin ๐Ÿ”’ Super Admin

Settings โ†’ Admin Users โ†’ "Invite Admin" โ†’ enter email. System generates invite_code and sends email.

โ‘ก Invited user clicks link โ†’ Google OAuth ๐Ÿ”ด Admin

Email contains invite link with invite_code. User clicks โ†’ Google OAuth sign-up โ†’ account linked with role = ADMIN, auth_method = GOOGLE_OAUTH.

Operator Invite Flow โ€‹

โ‘  Super Admin or Admin invites Operator ๐Ÿ”ด Admin

Settings โ†’ Admin Users โ†’ "Invite Operator" โ†’ enter email. Same invite flow as Admin.

โ‘ก Operator account created ๐ŸŸข System

Account created with role = OPERATOR. Admin grants page-level permissions via admin_user_permissions.

FM Onboarding Flow โ€‹

โ‘  Admin creates Fund ๐Ÿ”ด Admin

Navigate to Funds page โ†’ "Create Fund" โ†’ enter fund name, description, primary contact info.

โ‘ก Admin enters FM email ๐Ÿ”ด Admin

System sends invite email with invite_code to FM's email address.

โ‘ข FM clicks invite โ†’ Google OAuth ๐ŸŸฃ FM

FM signs up with Google OAuth (email must match invite). Account created with role = FUND_MANAGER.

โ‘ฃ FM auto-linked to fund ๐ŸŸข System

FM linked to fund via fund_members table. FM can belong to ONE fund only. No separate KYC. Same Google OAuth as Admin/Operator.

๐Ÿ“– RBAC Definition

Role-Based Access Control โ€” access determined by assigned role, not individual permissions. Aset uses a four-tier model: Super Admin (platform owner, password auth), Admin (full control), Operator (page-level permissions), Fund Manager (fund-scoped). Super Admin uses email + password; all others use Google OAuth.