# Role-Based Access Control (RBAC) System ## Overview The VIP Coordinator application implements a comprehensive role-based access control system with three distinct user roles, each with specific permissions and access levels. ## User Roles ### 1. System Administrator (`administrator`) **Highest privilege level - Full system access** #### Permissions: - ✅ **User Management**: Create, read, update, delete users - ✅ **Role Management**: Assign and modify user roles - ✅ **VIP Management**: Full CRUD operations on VIP records - ✅ **Driver Management**: Full CRUD operations on driver records - ✅ **Schedule Management**: Full CRUD operations on schedules - ✅ **System Settings**: Access to admin panel and API configurations - ✅ **Flight Tracking**: Access to all flight tracking features - ✅ **Reports & Analytics**: Access to all system reports #### API Endpoints Access: ``` POST /auth/users ✅ Admin only GET /auth/users ✅ Admin only PATCH /auth/users/:email/role ✅ Admin only DELETE /auth/users/:email ✅ Admin only POST /api/vips ✅ Admin + Coordinator GET /api/vips ✅ All authenticated users PUT /api/vips/:id ✅ Admin + Coordinator DELETE /api/vips/:id ✅ Admin + Coordinator POST /api/drivers ✅ Admin + Coordinator GET /api/drivers ✅ All authenticated users PUT /api/drivers/:id ✅ Admin + Coordinator DELETE /api/drivers/:id ✅ Admin + Coordinator POST /api/vips/:vipId/schedule ✅ Admin + Coordinator GET /api/vips/:vipId/schedule ✅ All authenticated users PUT /api/vips/:vipId/schedule/:id ✅ Admin + Coordinator PATCH /api/vips/:vipId/schedule/:id/status ✅ All authenticated users DELETE /api/vips/:vipId/schedule/:id ✅ Admin + Coordinator ``` ### 2. Coordinator (`coordinator`) **Standard operational access - Can manage VIPs, drivers, and schedules** #### Permissions: - ❌ **User Management**: Cannot manage users or roles - ✅ **VIP Management**: Full CRUD operations on VIP records - ✅ **Driver Management**: Full CRUD operations on driver records - ✅ **Schedule Management**: Full CRUD operations on schedules - ❌ **System Settings**: No access to admin panel - ✅ **Flight Tracking**: Access to flight tracking features - ✅ **Driver Availability**: Can check driver conflicts and availability - ✅ **Status Updates**: Can update event statuses #### Typical Use Cases: - Managing VIP arrivals and departures - Assigning drivers to VIPs - Creating and updating schedules - Monitoring flight statuses - Coordinating transportation logistics ### 3. Driver (`driver`) **Limited access - Can view assigned schedules and update status** #### Permissions: - ❌ **User Management**: Cannot manage users - ❌ **VIP Management**: Cannot create/edit/delete VIPs - ❌ **Driver Management**: Cannot manage other drivers - ❌ **Schedule Creation**: Cannot create or delete schedules - ✅ **View Schedules**: Can view VIP schedules and assigned events - ✅ **Status Updates**: Can update status of assigned events - ✅ **Personal Schedule**: Can view their own complete schedule - ❌ **System Settings**: No access to admin features #### API Endpoints Access: ``` GET /api/vips ✅ View only GET /api/drivers ✅ View only GET /api/vips/:vipId/schedule ✅ View only PATCH /api/vips/:vipId/schedule/:id/status ✅ Can update status GET /api/drivers/:driverId/schedule ✅ Own schedule only ``` #### Typical Use Cases: - Viewing assigned VIP transportation schedules - Updating event status (en route, completed, delayed) - Checking personal daily/weekly schedule - Viewing VIP contact information and notes ## Authentication Flow ### 1. Google OAuth Integration - Users authenticate via Google OAuth 2.0 - First user automatically becomes `administrator` - Subsequent users default to `coordinator` role - Administrators can change user roles after authentication ### 2. JWT Token System - Secure JWT tokens issued after successful authentication - Tokens include user role information - Middleware validates tokens and role permissions on each request ### 3. Role Assignment ```typescript // First user becomes admin const userCount = await databaseService.getUserCount(); const role = userCount === 0 ? 'administrator' : 'coordinator'; ``` ## Security Implementation ### Middleware Protection ```typescript // Authentication required app.get('/api/vips', requireAuth, async (req, res) => { ... }); // Role-based access app.post('/api/vips', requireAuth, requireRole(['coordinator', 'administrator']), async (req, res) => { ... }); // Admin only app.get('/auth/users', requireAuth, requireRole(['administrator']), async (req, res) => { ... }); ``` ### Frontend Role Checking ```typescript // User Management component if (currentUser?.role !== 'administrator') { return (
You need administrator privileges to access user management.