Test Plan: Role-Based Access Control (RBAC)

♻️ Reconciled against current code — 2026-07-01. Rewritten to match the live dev branch. Key corrections vs. the prior version: 10 system roles (all non-deletable); permission strings use the MODULE:ACTION:resource format (not dot-notation); member role assignment is PUT (not POST); the Roles & Permissions page is reached via Settings (no direct sidebar link); role codes are FINANCE_MANAGER / EVENT_MANAGER (not TREASURER / EVENTS_MANAGER); and custom roles cannot be assigned to a member through the UI. See the green banner below for what's new this cycle.
🆕 New on stage — 2026-06-19 → 2026-07-01.

1. Introduction

This document outlines the test strategy, scope, and approach for the Role-Based Access Control (RBAC) module of MemberVu. The module manages roles, permissions, and access enforcement across the organization (tenant) portal.

2. Scope

  1. Role Management: Viewing system roles; creating / editing / duplicating / deleting custom roles.
  2. Permission Management: Granting and revoking permissions on a role via the permission matrix.
  3. Role Assignment: Assigning built-in staff roles to members.
  4. Access Control: Verifying UI navigation and API permissions are enforced per role.
  5. Role Audit: Tracking role changes via the audit log.

3. Test Strategy

4. Environment

ConcernLocation (current code)
Roles & Permissions pageRoute /admin/roles. No direct sidebar link — reach it via sidebar Organization > Settings (/admin/settings) then the "Roles & Permissions" card. Guard: ADMIN or SUPER_ADMIN.
Assign roles to a memberRoute /admin/members → click a member → Actions ▾ > Manage Roles modal (visible to ADMIN only).
Roles API/api/admin/roles family (legacy alias /admin/roles); permissions at GET /api/admin/permissions.
Member role-assignment APIPUT /api/membership/members/:id/roles — body { "roles": ["CODE", ...] } (full replacement; MEMBER auto-appended server-side).
Enforcement codeauth-service/src/rbac.ts (requirePermission, SUPER_ADMIN bypass, 5-min permission cache) + auth-service/src/services/rbac/ (role/permission seed).
Frontend pagefrontend/pwa-app/src/pages/AdminRolesPermissionsPage.tsx + components/roles/.

5. Predefined Roles (10 system roles)

All ten ship as system roles (isSystem: true) and cannot be deleted. Their name / description / colour and permission assignments can be edited; the role code is immutable. Permissions use the MODULE:ACTION:resource format.

Role CodeDisplay NameDescriptionSystem?
ADMINAdministratorFull administrative access (all 38 permissions via wildcard)Yes
OFFICEROfficerBoard officer — read-only visibility into org healthYes
FINANCE_MANAGERTreasurerManages invoices, payments, dues, bank accountsYes
EVENT_MANAGEREvents ManagerCreates/manages events, registrations, check-in; can view+send broadcastsYes
MEMBERSHIP_MANAGERMembership ManagerMember applications, approvals, invitations, importYes
COMMUNICATIONS_MANAGERCommunications ManagerAnnouncements and email broadcastsYes
MEMBERMemberStandard active-member accessYes
PENDING_MEMBERPending MemberAwaiting approval — limited accessYes
EXPIRED_MEMBERExpired MemberMembership lapsed — renewal requiredYes
GUESTGuestNon-member — public features onlyYes

Note: SUPER_ADMIN is a platform role (not a tenant role). It lives in platformRoles, not roles, and bypasses all org permission checks. Platform/SuperAdmin actions belong in the separate admin portal (stg-admin.membervu.com), not the org portal.

6. Test Data (RCME seed)

UserEmail / PasswordRole code(s)
Adminadmin@rcme.membervu.com / Admin123!ADMIN
Juan Santosofficer@rcme.membervu.com / Officer123!OFFICER
Ana Reyestreasurer@demo.membervu.com / Treasurer123!FINANCE_MANAGER
Carlos Garciaevents@demo.membervu.com / Events123!EVENT_MANAGER
Elena Torresmembershipchair@demo.membervu.com / Membership123!MEMBERSHIP_MANAGER
Seung Eun Leecomms@demo.membervu.com / Comms123!COMMUNICATIONS_MANAGER
Maria Cruztestmember@rcme.membervu.com / Member123!MEMBER
Antonio Dela Cruzexpired@demo.membervu.com / Expired123!EXPIRED_MEMBER
Roberto Mendozaguest@demo.membervu.com / Guest123!GUEST
SuperAdminsuperadmin@zeniark.com / SuperAdmin123!platformRoles: SUPER_ADMIN
No seeded PENDING_MEMBER user. pending@demo.membervu.com (Miguel Fernandez) is an applied prospect with role GUEST + status GUEST_ATTENDEEnot a PENDING_MEMBER. To test PENDING_MEMBER access you must drive a member into that state via the application flow.

7. Test Deliverables

8. Dependencies

9. Risk Areas