This issue tracks the implementation of role management and authorization APIs to support project-scoped permissions in the Rahat Platform. The system allows roles to be assigned to users within specific project contexts, enabling fine-grained access control.
Role: id, name, isSystem, expiry
Permission: id, roleId, action, subject, inverted, conditions, reason
UserRole: id, userId, roleId, projectId, expiry
Title
Implement Role Management and Project-Scoped Authorization APIs
Description
This issue tracks the implementation of role management and authorization APIs to support project-scoped permissions in the Rahat Platform. The system allows roles to be assigned to users within specific project contexts, enabling fine-grained access control.
Background
Database Schema
Tasks
1. Core Role CRUD
POST /api/roles- Create new role{ name, isSystem, description }GET /api/roles- List all roles?page=1&limit=10&isSystem=trueGET /api/roles/:roleId- Get role details with permissionsPUT /api/roles/:roleId- Update role metadata{ name, description, isSystem }DELETE /api/roles/:roleId- Delete role{ success: true }2. Permission Management for Roles
POST /api/roles/:roleId/permissions- Add permission to role{ action, subject, inverted, conditions, reason }GET /api/roles/:roleId/permissions- List role permissionsPUT /api/permissions/:permissionId- Update permission{ action, subject, inverted, conditions, reason }DELETE /api/permissions/:permissionId- Delete permission{ success: true }POST /api/roles/:roleId/permissions/bulk- Bulk add permissions{ permissions: [{ action, subject, ... }, ...] }DELETE /api/roles/:roleId/permissions/bulk- Bulk delete permissions{ permissionIds: [1, 2, 3] }{ deleted: 3 }3. User Role Assignment APIs
Project-Scoped Assignments
POST /api/projects/:projectId/users/:userId/roles- Assign role to user in project{ roleId, expiry? }GET /api/projects/:projectId/users/:userId/roles- Get user's roles in projectDELETE /api/projects/:projectId/users/:userId/roles/:roleId- Remove role from user in project{ success: true }PUT /api/projects/:projectId/users/:userId/roles/:roleId- Update role assignment{ expiry }4. User Role Query APIs
User-Centric Queries
GET /api/users/:userId/roles- Get all user's role assignments?includeExpired=false&projectId=xyzGET /api/users/:userId/roles/active- Get only active role assignmentsGET /api/users/:userId/permissions- Get flattened permissions across all projects{ permissions: [...], rolesByProject: {...} }GET /api/users/:userId/projects/:projectId/permissions- Get user permissions in specific project5. Project-Centric Queries
GET /api/projects/:projectId/users- List all users with roles in project?roleId=5&includeExpired=falseGET /api/projects/:projectId/roles- List unique roles assigned in projectGET /api/projects/:projectId/roles/:roleId/users- List users with specific role in projectGET /api/projects/:projectId/users/:userId/abilities- Get user's computed abilities in project{ rules: [...CASL rules...] }GET /api/projects/:projectId/team- Get complete team rosterTechnical Requirements
Validation
Authorization
Error Handling