@mostajs/rbac-tenant
v0.1.2
Published
RBAC étagé délégué (multi-tenant) : rôles plateforme (global) + rôles tenant gérés par un admin DÉLÉGUÉ dans son périmètre, avec permission boundary anti-escalade. Compose @mostajs/rbac (matching) + multitenancy + repository + audit. Membre de mosta-acces
Maintainers
Readme
@mostajs/rbac-tenant
Auteur : Dr Hamid MADANI [email protected]
RBAC étagé délégué (multi-tenant) : deux étages d'autorisation.
- Plateforme — rôles globaux gérés par l'hôte (via
@mostajs/rbac). - Tenant — chaque locataire (entreprise) a ses rôles locaux, qu'un admin délégué (ex. le responsable) définit et assigne dans son périmètre, sans pouvoir toucher la plateforme ni les autres tenants (permission boundary anti-escalade).
Compose (DEVRULES §10) @mostajs/rbac (matching) + @mostajs/multitenancy (scope) + @mostajs/repository (persistance) + @mostajs/audit — ne réimplémente rien. Membre de mosta-access-control-stack.
import { createScopedRbac } from '@mostajs/rbac-tenant';
import { hasPermission } from '@mostajs/rbac/helpers/permissions';
const rbacT = createScopedRbac({
match: hasPermission,
platformPermissionsOf: (id) => platformRbac.permissionsOf(id), // droits plateforme (Hadhinat)
catalog: ['company.projects.write', 'company.ged.write', 'company.members.invite'],
});
rbacT.grantDelegation('ent-42', 'resp-id'); // le responsable administre SON entreprise
rbacT.defineTenantRole('resp-id', 'ent-42', 'chef-projet', ['company.projects.write']);
rbacT.assignRole('resp-id', 'collab-id', 'chef-projet', { tenantId: 'ent-42' });
rbacT.can('collab-id', 'company.projects.write', { tenantId: 'ent-42' }); // true
rbacT.defineTenantRole('resp-id', 'ent-42', 'x', ['incubator.company.create']); // throw (anti-escalade)API complète : llms.txt. Tests : npm test (8). Étude/conception : incubator/app/docs/10-ETUDE-RBAC-TENANT-24062026.md. AGPL-3.0-or-later.
