{"_id":"@akkikhan/saas-framework-rbac","_rev":"2-755fbcb0010397e4752a9d028a4f403a","name":"@akkikhan/saas-framework-rbac","dist-tags":{"latest":"1.0.0-dev.1"},"versions":{"1.0.0":{"name":"@akkikhan/saas-framework-rbac","version":"1.0.0","keywords":["rbac","roles","permissions","multi-tenant","saas","authorization","express"],"author":{"name":"SaaS Framework"},"license":"MIT","_id":"@akkikhan/saas-framework-rbac@1.0.0","maintainers":[{"name":"akkikhan","email":"akki@primussoft.com"}],"homepage":"https://github.com/akkikhan/saas-framework-rbac#readme","bugs":{"url":"https://github.com/akkikhan/saas-framework-rbac/issues"},"dist":{"shasum":"45a1ac75c3026040010df49f2e4267b594816399","tarball":"https://registry.npmjs.org/@akkikhan/saas-framework-rbac/-/saas-framework-rbac-1.0.0.tgz","fileCount":7,"integrity":"sha512-M8BulJ/lPLOogk6lLMTanZzEu38Sp2kgHJzmo+dfs5nAWgnZdni7fm+1K/BZNyK9UPzNW7jtcrvcqZkiXrH09A==","signatures":[{"sig":"MEUCIQCtjth02w1bigwePBn5nqHUtd2U5o/+s3G1szQwSzN9swIgIBH1QFcskSk4bZrIY9A+09YS5d0BUtP3CF7CqIYRYPw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25745},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ed4dc048ae63648f4a7bfd8b2e28a8e9d2fceae4","scripts":{"build":"tsc","prepublishOnly":"npm run build","publish-package":"npm publish --access public"},"_npmUser":{"name":"akkikhan","email":"akki@primussoft.com"},"repository":{"url":"git+https://github.com/akkikhan/saas-framework-rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Role-Based Access Control SDK for SaaS Framework multi-tenant applications","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0","@types/node":"^24.3.0","@types/express":"^4.17.21"},"peerDependencies":{"express":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/saas-framework-rbac_1.0.0_1756119101928_0.06460959574120428","host":"s3://npm-registry-packages-npm-production"}},"1.0.0-dev.1":{"name":"@akkikhan/saas-framework-rbac","version":"1.0.0-dev.1","description":"Role-Based Access Control SDK for SaaS Framework multi-tenant applications","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","prepublishOnly":"npm run build","publish-package":"npm publish --access public"},"keywords":["rbac","roles","permissions","multi-tenant","saas","authorization","express"],"author":{"name":"SaaS Framework"},"license":"MIT","devDependencies":{"@types/express":"^4.17.21","typescript":"^5.0.0"},"peerDependencies":{"express":">=4.0.0"},"repository":{"type":"git","url":"git+https://github.com/akkikhan/rbac.git"},"homepage":"https://github.com/saas-framework/rbac#readme","_id":"@akkikhan/saas-framework-rbac@1.0.0-dev.1","gitHead":"9ce7f60754aed225b07d36818461600d787f65cf","bugs":{"url":"https://github.com/akkikhan/rbac/issues"},"_nodeVersion":"22.16.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-tHasdYNwoqJDD+pf4FhlfhTwu/9SpKurBNUTt17U65mK8XMqsYDwIgovOFBG2YmFRTX+ixUOxrD+VaVv4azJsQ==","shasum":"89fd3786425d4f580ef0fa4ffe6f3b4620f62300","tarball":"https://registry.npmjs.org/@akkikhan/saas-framework-rbac/-/saas-framework-rbac-1.0.0-dev.1.tgz","fileCount":7,"unpackedSize":25479,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGE2labYnhrvWHCnZManjVU3ziToa0ivy5EG1+RVy8BhAiAGnpf7AYB9VfdMhc6uHe9/pBuTeAZR/IgXQYNT1qjtSg=="}]},"_npmUser":{"name":"akkikhan","email":"akki@primussoft.com"},"directories":{},"maintainers":[{"name":"akkikhan","email":"akki@primussoft.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/saas-framework-rbac_1.0.0-dev.1_1756272820912_0.39182065524500853"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-25T10:51:41.773Z","modified":"2025-08-27T05:33:41.291Z","1.0.0":"2025-08-25T10:51:42.104Z","1.0.0-dev.1":"2025-08-27T05:33:41.110Z"},"bugs":{"url":"https://github.com/akkikhan/rbac/issues"},"author":{"name":"SaaS Framework"},"license":"MIT","homepage":"https://github.com/saas-framework/rbac#readme","keywords":["rbac","roles","permissions","multi-tenant","saas","authorization","express"],"repository":{"type":"git","url":"git+https://github.com/akkikhan/rbac.git"},"description":"Role-Based Access Control SDK for SaaS Framework multi-tenant applications","maintainers":[{"name":"akkikhan","email":"akki@primussoft.com"}],"readme":"# @saas-framework/rbac\n\nA powerful Role-Based Access Control (RBAC) SDK for multi-tenant SaaS applications built with the SaaS Framework.\n\n## Features\n\n- **Role Management**: Create and manage user roles\n- **Permission System**: Granular permission control\n- **Express Middleware**: Easy integration with Express.js routes\n- **Multi-tenant Support**: Isolated RBAC per tenant\n- **TypeScript Support**: Full TypeScript definitions included\n- **Flexible Authorization**: Support for AND/OR permission logic\n\n## Installation\n\n```bash\nnpm install @saas-framework/rbac\n```\n\n## Quick Start\n\n```typescript\nimport { SaaSRBAC } from '@saas-framework/rbac';\n\nconst rbac = new SaaSRBAC({\n  apiKey: 'your-tenant-rbac-api-key',\n  baseUrl: 'https://your-saas-platform.com/api/v2/rbac'\n});\n\n// Check user permission\nconst canEdit = await rbac.hasPermission('user123', 'posts.edit');\n\n// Get user roles\nconst roles = await rbac.getUserRoles('user123');\n\n// Get user permissions\nconst permissions = await rbac.getUserPermissions('user123');\n```\n\n## Express.js Integration\n\n### Permission-Based Protection\n\n```typescript\nimport express from 'express';\nimport { SaaSRBAC } from '@saas-framework/rbac';\n\nconst app = express();\nconst rbac = new SaaSRBAC({ /* config */ });\n\n// Require specific permission\napp.get('/api/posts', \n  rbac.middleware(['posts.read']),\n  (req, res) => {\n    res.json({ posts: [] });\n  }\n);\n\n// Require multiple permissions (OR logic)\napp.post('/api/posts',\n  rbac.middleware(['posts.create', 'posts.admin']),\n  (req, res) => {\n    // User needs either posts.create OR posts.admin\n  }\n);\n\n// Require all permissions (AND logic)\napp.delete('/api/posts/:id',\n  rbac.middleware(['posts.delete', 'posts.admin'], { requireAll: true }),\n  (req, res) => {\n    // User needs BOTH posts.delete AND posts.admin\n  }\n);\n```\n\n### Role-Based Protection\n\n```typescript\n// Require specific role\napp.get('/api/admin',\n  rbac.roleMiddleware(['admin']),\n  (req, res) => {\n    res.json({ message: 'Admin access granted' });\n  }\n);\n```\n\n## API Reference\n\n### Constructor\n\n```typescript\nnew SaaSRBAC(config: SaaSRBACConfig)\n```\n\n#### SaaSRBACConfig\n\n- `apiKey` (string): Your tenant's RBAC API key\n- `baseUrl` (string): Base URL of your SaaS platform's RBAC endpoints\n\n### Permission Methods\n\n#### `hasPermission(userId: string, permission: string): Promise<boolean>`\n\nChecks if a user has a specific permission.\n\n#### `hasPermissions(userId: string, permissions: string[]): Promise<{ [key: string]: boolean }>`\n\nChecks multiple permissions for a user.\n\n#### `getUserPermissions(userId: string): Promise<string[]>`\n\nGets all effective permissions for a user.\n\n### Role Methods\n\n#### `getUserRoles(userId: string): Promise<Role[]>`\n\nGets all roles assigned to a user.\n\n#### `getRoles(): Promise<Role[]>`\n\nGets all available roles in the tenant.\n\n#### `assignRole(userId: string, roleId: string): Promise<void>`\n\nAssigns a role to a user.\n\n#### `removeRole(userId: string, roleId: string): Promise<void>`\n\nRemoves a role from a user.\n\n### System Methods\n\n#### `getPermissions(): Promise<Permission[]>`\n\nGets all available permissions in the tenant.\n\n### Middleware Methods\n\n#### `middleware(permissions: string[], options?: MiddlewareOptions): RequestHandler`\n\nExpress middleware for permission-based route protection.\n\n**Options:**\n- `requireAll` (boolean, default: false): Whether user must have ALL permissions (AND) vs ANY permission (OR)\n\n#### `roleMiddleware(roles: string[]): RequestHandler`\n\nExpress middleware for role-based route protection.\n\n## Data Types\n\n```typescript\ninterface Role {\n  id: string;\n  tenantId: string;\n  name: string;\n  description: string;\n  permissions: string[];\n  isSystem: boolean;\n}\n\ninterface Permission {\n  id: string;\n  tenantId: string;\n  key: string;\n  description: string;\n  category: string;\n  isSystem: boolean;\n}\n```\n\n## Usage Examples\n\n### Complex Permission Checking\n\n```typescript\n// Check multiple permissions\nconst results = await rbac.hasPermissions('user123', [\n  'posts.create',\n  'posts.edit',\n  'posts.delete'\n]);\n\nconsole.log(results);\n// { 'posts.create': true, 'posts.edit': true, 'posts.delete': false }\n```\n\n### Role Management\n\n```typescript\n// Assign admin role to user\nawait rbac.assignRole('user123', 'admin-role-id');\n\n// Remove role from user\nawait rbac.removeRole('user123', 'editor-role-id');\n```\n\n## Error Handling\n\nAll methods throw descriptive errors:\n\n```typescript\ntry {\n  await rbac.assignRole(userId, roleId);\n} catch (error) {\n  console.error('Role assignment failed:', error.message);\n}\n```\n\n## Integration with Authentication\n\nUse this package alongside `@saas-framework/auth`:\n\n```typescript\nimport { SaaSAuth } from '@saas-framework/auth';\nimport { SaaSRBAC } from '@saas-framework/rbac';\n\nconst auth = new SaaSAuth({ /* config */ });\nconst rbac = new SaaSRBAC({ /* config */ });\n\napp.use('/api/protected', \n  auth.middleware(),           // Authenticate first\n  rbac.middleware(['admin'])   // Then authorize\n);\n```\n\n## License\n\nMIT\n\n## Support\n\nFor issues and questions, please visit: [GitHub Issues](https://github.com/saas-framework/rbac/issues)","readmeFilename":"README.md"}