@dudousxd/nestjs-authz-mikro-orm 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +67 -3
- package/dist/authz-rbac.module.d.ts +12 -0
- package/dist/authz-rbac.module.d.ts.map +1 -1
- package/dist/authz-rbac.module.js +47 -8
- package/dist/authz-rbac.module.js.map +1 -1
- package/dist/entities.d.ts +15 -1
- package/dist/entities.d.ts.map +1 -1
- package/dist/entities.js +14 -1
- package/dist/entities.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mikro-orm-authz.store.d.ts +45 -15
- package/dist/mikro-orm-authz.store.d.ts.map +1 -1
- package/dist/mikro-orm-authz.store.js +114 -33
- package/dist/mikro-orm-authz.store.js.map +1 -1
- package/dist/tenancy.d.ts +100 -0
- package/dist/tenancy.d.ts.map +1 -0
- package/dist/tenancy.js +128 -0
- package/dist/tenancy.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @dudousxd/nestjs-authz-mikro-orm
|
|
2
2
|
|
|
3
|
+
## 1.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#72](https://github.com/DavideCarvalho/nestjs-authz/pull/72) [`58a5d72`](https://github.com/DavideCarvalho/nestjs-authz/commit/58a5d72d2964a7cfae9cbfe8506526c8518ba30a) Thanks [@DavideCarvalho](https://github.com/DavideCarvalho)! - Tenancy for the RBAC modules, following the `@dudousxd/nestjs-context` tenancy switch.
|
|
8
|
+
|
|
9
|
+
- New `tenancy` option (`'inherit' | false | { enabled?, kinds?, nullRows?, roles? }`, default `'inherit'`). With context tenancy on, permission and role checks are scoped to the request's tenant from `Context.setTenant`. A request with no tenant, inside `Context.allTenants()`, or outside a request sees global assignments only. `kinds` limits the tenant kinds this module honours. With tenancy off nothing changes.
|
|
10
|
+
- `tenancy.roles` maps the caller's role inside the tenant (`tenant.role`) to authz roles that apply in that tenant only, e.g. `{ owner: 'org_admin' }`.
|
|
11
|
+
- New `tenant` resolver option, `(user) => tenantId | null | undefined`: an explicit tenant that wins over the context.
|
|
12
|
+
- MikroORM and Prisma can now store tenant-scoped role assignments like Drizzle and TypeORM: `assignRole`, `removeRole` and `setUserRoles` take `{ tenantId }`, and the read methods take a tenant scope. MikroORM: build the entities with `createAuthzEntitySchemas({}, { tenantScoped: true })`. Prisma: add `tenantId String @default("")` to `UserRole` and its `@@id`, then pass `tenantScoped: true`. Without that, every assignment stays global.
|
|
13
|
+
|
|
3
14
|
## 1.0.0
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -213,9 +213,73 @@ await store.listRoleAssignments({ user: { type: 'user', id: 7 } });
|
|
|
213
213
|
await store.removeUser({ type: 'user', id: 7 });
|
|
214
214
|
```
|
|
215
215
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
nothing.
|
|
216
|
+
`tenantId` filters: omitted = every tenant, `null` = global assignments only, a string = that
|
|
217
|
+
tenant's scoped assignments only. Without the tenant column (below) every row has
|
|
218
|
+
`tenantId: null`, so a tenant id string matches nothing.
|
|
219
|
+
|
|
220
|
+
## Tenant-scoped roles
|
|
221
|
+
|
|
222
|
+
Build the entities with `tenantScoped: true` to assign roles per tenant. The user-role table
|
|
223
|
+
gets a `tenant_id` column (default `''`, a global assignment) in its primary key:
|
|
224
|
+
|
|
225
|
+
```ts
|
|
226
|
+
import { createAuthzEntitySchemas } from '@dudousxd/nestjs-authz-mikro-orm';
|
|
227
|
+
|
|
228
|
+
const authz = createAuthzEntitySchemas({}, { tenantScoped: true }); // or your own table names
|
|
229
|
+
MikroOrmModule.forRoot({ entities: [...authz.all /* , your entities */] });
|
|
230
|
+
|
|
231
|
+
await store.assignRole(user, 'editor', { tenantId: 'acme' }); // only inside acme
|
|
232
|
+
await store.assignRole(user, 'viewer'); // everywhere
|
|
233
|
+
await store.getRolesForUser(user, { tenantId: 'acme' }); // ['editor', 'viewer']
|
|
234
|
+
await store.getRolesForUser(user); // ['viewer']
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
`removeRole` and `setUserRoles` take the same `{ tenantId }` (omitted = the global
|
|
238
|
+
assignments). Without `tenantScoped`, every assignment is global and reads ignore the tenant.
|
|
239
|
+
`assignRole` and `setUserRoles` with a `tenantId` throw; `removeRole` with one does nothing,
|
|
240
|
+
since there is no tenant assignment to remove.
|
|
241
|
+
|
|
242
|
+
### Migrating an existing database
|
|
243
|
+
|
|
244
|
+
`ensureAuthzSchema` / `autoCreateSchema` (or `authzSchemaSql` in a migration) add the `tenant_id`
|
|
245
|
+
column, so existing rows become global assignments. Widen the primary key once, so the same role
|
|
246
|
+
can be assigned in two tenants:
|
|
247
|
+
|
|
248
|
+
```sql
|
|
249
|
+
-- PostgreSQL (default constraint name; check yours with \d authz_user_role)
|
|
250
|
+
ALTER TABLE authz_user_role DROP CONSTRAINT authz_user_role_pkey,
|
|
251
|
+
ADD PRIMARY KEY (user_type, user_id, role_id, source, tenant_id);
|
|
252
|
+
-- MySQL
|
|
253
|
+
ALTER TABLE authz_user_role DROP PRIMARY KEY,
|
|
254
|
+
ADD PRIMARY KEY (user_type, user_id, role_id, source, tenant_id);
|
|
255
|
+
-- SQLite: recreate the table with the 5-column key (SQLite cannot alter a primary key).
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## Tenancy
|
|
259
|
+
|
|
260
|
+
The RBAC module reads the tenant only when tenancy is on: turn it on with
|
|
261
|
+
`ContextModule.forRoot({ tenancy: { enabled: true } })` in `@dudousxd/nestjs-context`. Checks
|
|
262
|
+
are then scoped to the request's tenant from `Context.setTenant(...)`.
|
|
263
|
+
A request with no tenant, or inside `Context.allTenants()`, sees global assignments only.
|
|
264
|
+
|
|
265
|
+
```ts
|
|
266
|
+
AuthzRbacModule.forRoot({
|
|
267
|
+
store,
|
|
268
|
+
tenancy: {
|
|
269
|
+
kinds: ['organization'], // optional: tenant kinds this module honours
|
|
270
|
+
roles: { owner: 'org_admin', member: 'org_member' }, // optional: tenant.role → authz roles in that tenant
|
|
271
|
+
},
|
|
272
|
+
tenant: (user) => (user as { orgId?: string }).orgId, // optional: an explicit tenant wins over the context
|
|
273
|
+
});
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
`tenancy` defaults to `'inherit'` (follow the context switch); `false` keeps this module out.
|
|
277
|
+
Roles mapped with `roles` apply only inside that tenant and only to the context's current user.
|
|
278
|
+
The `tenant` resolver returns a tenant id, `null` for the global scope, or `undefined` to fall
|
|
279
|
+
back to the context.
|
|
280
|
+
|
|
281
|
+
With tenancy on and the default entities, every assignment is global, so only `roles` and the
|
|
282
|
+
`tenant` resolver change what a check sees.
|
|
219
283
|
|
|
220
284
|
## License
|
|
221
285
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { UserRef } from '@dudousxd/nestjs-authz/store-kit';
|
|
2
2
|
import { type DynamicModule } from '@nestjs/common';
|
|
3
3
|
import type { MikroOrmAuthzStore } from './mikro-orm-authz.store.js';
|
|
4
|
+
import { type AuthzTenancyOption, type TenantResolver } from './tenancy.js';
|
|
4
5
|
/** Injection token holding the {@link MikroOrmAuthzStore} the RBAC module manages. */
|
|
5
6
|
export declare const AUTHZ_RBAC_STORE: unique symbol;
|
|
6
7
|
/** Injection token holding the resolved {@link AuthzRbacModuleOptions}. */
|
|
@@ -23,6 +24,17 @@ export interface AuthzRbacModuleOptions {
|
|
|
23
24
|
* {@link defaultUserRefMapper} (`{ type, id }` or `{ id }`).
|
|
24
25
|
*/
|
|
25
26
|
userRefFrom?: UserRefMapper;
|
|
27
|
+
/**
|
|
28
|
+
* Tenancy, from `@dudousxd/nestjs-context`. `'inherit'` (default) follows `ContextModule`'s
|
|
29
|
+
* `tenancy.enabled`; with it on, checks are scoped to the context tenant. The object form adds
|
|
30
|
+
* `kinds` and `roles` (map the caller's `tenant.role` to authz roles in that tenant).
|
|
31
|
+
*/
|
|
32
|
+
tenancy?: AuthzTenancyOption;
|
|
33
|
+
/**
|
|
34
|
+
* Explicit tenant for a check, from the user being checked. Wins over the context: return a
|
|
35
|
+
* tenant id, `null` for the global scope, or `undefined` to fall back to the context.
|
|
36
|
+
*/
|
|
37
|
+
tenant?: TenantResolver;
|
|
26
38
|
}
|
|
27
39
|
export interface AuthzRbacModuleAsyncOptions {
|
|
28
40
|
imports?: unknown[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz-rbac.module.d.ts","sourceRoot":"","sources":["../src/authz-rbac.module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"authz-rbac.module.d.ts","sourceRoot":"","sources":["../src/authz-rbac.module.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EACL,KAAK,aAAa,EAQnB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EACL,KAAK,kBAAkB,EAIvB,KAAK,cAAc,EAEpB,MAAM,cAAc,CAAC;AAEtB,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,eAAuD,CAAC;AACrF,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,eAAyD,CAAC;AAEzF;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,sBAAsB;IACrC,2EAA2E;IAC3E,KAAK,EAAE,kBAAkB,CAAC;IAC1B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC;IAC5B;;;;OAIG;IACH,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B;;;OAGG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;IACnB,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,sBAAsB,CAAC,GAAG,sBAAsB,CAAC;CAC9F;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAOvE;AAqHD;;;;;;GAMG;AACH,qBACa,eAAe;IAC1B,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,GAAG,aAAa;IAa9D,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,2BAA2B,GAAG,aAAa;IAsBxE,OAAO,CAAC,MAAM,CAAC,eAAe;CAS/B"}
|
|
@@ -11,8 +11,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
11
11
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
12
|
};
|
|
13
13
|
var AuthzRbacModule_1;
|
|
14
|
-
import { PERMISSION_PROVIDER, ROLE_PROVIDER, } from '@dudousxd/nestjs-authz';
|
|
14
|
+
import { CONTEXT_ACCESSOR, PERMISSION_PROVIDER, ROLE_PROVIDER, } from '@dudousxd/nestjs-authz';
|
|
15
15
|
import { Inject, Injectable, Module, Optional, } from '@nestjs/common';
|
|
16
|
+
import { ModuleRef } from '@nestjs/core';
|
|
17
|
+
import { rbacTenant, } from './tenancy.js';
|
|
16
18
|
/** Injection token holding the {@link MikroOrmAuthzStore} the RBAC module manages. */
|
|
17
19
|
export const AUTHZ_RBAC_STORE = Symbol.for('@dudousxd/nestjs-authz-mikro-orm:store');
|
|
18
20
|
/** Injection token holding the resolved {@link AuthzRbacModuleOptions}. */
|
|
@@ -36,10 +38,24 @@ export function defaultUserRefMapper(user) {
|
|
|
36
38
|
*/
|
|
37
39
|
let RbacPermissionProvider = class RbacPermissionProvider {
|
|
38
40
|
options;
|
|
41
|
+
context;
|
|
42
|
+
moduleRef;
|
|
39
43
|
// `getPermissions` lists every grant `hasPermission` can find, for any resource.
|
|
40
44
|
exhaustivePermissions = true;
|
|
41
|
-
|
|
45
|
+
contextCache = { resolved: false, value: undefined };
|
|
46
|
+
constructor(options, context, moduleRef) {
|
|
42
47
|
this.options = options;
|
|
48
|
+
this.context = context;
|
|
49
|
+
this.moduleRef = moduleRef;
|
|
50
|
+
}
|
|
51
|
+
tenant(user, ref) {
|
|
52
|
+
return rbacTenant(this.options, user, ref, this.context, this.moduleRef, this.contextCache, false);
|
|
53
|
+
}
|
|
54
|
+
/** The permissions `tenancy.roles` grants through the caller's role in the tenant. */
|
|
55
|
+
async tenantRolePermissions(roles) {
|
|
56
|
+
if (roles.length === 0)
|
|
57
|
+
return [];
|
|
58
|
+
return Object.values(await this.options.store.getRolePermissions(roles)).flat();
|
|
43
59
|
}
|
|
44
60
|
// The core `PermissionProvider` interface passes an optional `resource` (3rd
|
|
45
61
|
// arg); it is intentionally ignored here. RBAC grants are model-less,
|
|
@@ -50,7 +66,10 @@ let RbacPermissionProvider = class RbacPermissionProvider {
|
|
|
50
66
|
const ref = map(user);
|
|
51
67
|
if (ref === undefined)
|
|
52
68
|
return undefined;
|
|
53
|
-
|
|
69
|
+
const tenant = this.tenant(user, ref);
|
|
70
|
+
if (await this.options.store.userHasPermission(ref, permission, tenant.scope))
|
|
71
|
+
return true;
|
|
72
|
+
return (await this.tenantRolePermissions(tenant.roles)).includes(permission);
|
|
54
73
|
}
|
|
55
74
|
// Expose the user's full granted permission set so the core can apply
|
|
56
75
|
// Laravel/spatie-style wildcard matching (a granted `posts.*` satisfies a check
|
|
@@ -60,13 +79,20 @@ let RbacPermissionProvider = class RbacPermissionProvider {
|
|
|
60
79
|
const ref = map(user);
|
|
61
80
|
if (ref === undefined)
|
|
62
81
|
return undefined;
|
|
63
|
-
|
|
82
|
+
const tenant = this.tenant(user, ref);
|
|
83
|
+
const own = await this.options.store.getPermissionsForUser(ref, tenant.scope);
|
|
84
|
+
if (tenant.roles.length === 0)
|
|
85
|
+
return own;
|
|
86
|
+
return [...new Set([...own, ...(await this.tenantRolePermissions(tenant.roles))])];
|
|
64
87
|
}
|
|
65
88
|
};
|
|
66
89
|
RbacPermissionProvider = __decorate([
|
|
67
90
|
Injectable(),
|
|
68
91
|
__param(0, Inject(AUTHZ_RBAC_OPTIONS)),
|
|
69
|
-
|
|
92
|
+
__param(1, Optional()),
|
|
93
|
+
__param(1, Inject(CONTEXT_ACCESSOR)),
|
|
94
|
+
__param(2, Optional()),
|
|
95
|
+
__metadata("design:paramtypes", [Object, Object, ModuleRef])
|
|
70
96
|
], RbacPermissionProvider);
|
|
71
97
|
/**
|
|
72
98
|
* The RBAC {@link RoleProvider} the Gate consults (via the shared {@link ROLE_PROVIDER}
|
|
@@ -76,21 +102,34 @@ RbacPermissionProvider = __decorate([
|
|
|
76
102
|
*/
|
|
77
103
|
let RbacRoleProvider = class RbacRoleProvider {
|
|
78
104
|
options;
|
|
79
|
-
|
|
105
|
+
context;
|
|
106
|
+
moduleRef;
|
|
107
|
+
contextCache = { resolved: false, value: undefined };
|
|
108
|
+
constructor(options, context, moduleRef) {
|
|
80
109
|
this.options = options;
|
|
110
|
+
this.context = context;
|
|
111
|
+
this.moduleRef = moduleRef;
|
|
112
|
+
}
|
|
113
|
+
tenant(user, ref) {
|
|
114
|
+
return rbacTenant(this.options, user, ref, this.context, this.moduleRef, this.contextCache, false);
|
|
81
115
|
}
|
|
82
116
|
async getRoles(user) {
|
|
83
117
|
const map = this.options.userRefFrom ?? defaultUserRefMapper;
|
|
84
118
|
const ref = map(user);
|
|
85
119
|
if (ref === undefined)
|
|
86
120
|
return undefined;
|
|
87
|
-
|
|
121
|
+
const tenant = this.tenant(user, ref);
|
|
122
|
+
const own = await this.options.store.getRolesForUser(ref, tenant.scope);
|
|
123
|
+
return tenant.roles.length === 0 ? own : [...new Set([...own, ...tenant.roles])];
|
|
88
124
|
}
|
|
89
125
|
};
|
|
90
126
|
RbacRoleProvider = __decorate([
|
|
91
127
|
Injectable(),
|
|
92
128
|
__param(0, Inject(AUTHZ_RBAC_OPTIONS)),
|
|
93
|
-
|
|
129
|
+
__param(1, Optional()),
|
|
130
|
+
__param(1, Inject(CONTEXT_ACCESSOR)),
|
|
131
|
+
__param(2, Optional()),
|
|
132
|
+
__metadata("design:paramtypes", [Object, Object, ModuleRef])
|
|
94
133
|
], RbacRoleProvider);
|
|
95
134
|
/** Runs `ensureAuthzSchema` on bootstrap when `autoCreateSchema` is not disabled. */
|
|
96
135
|
let AuthzRbacBootstrap = class AuthzRbacBootstrap {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authz-rbac.module.js","sourceRoot":"","sources":["../src/authz-rbac.module.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EACL,mBAAmB,EAEnB,aAAa,GAEd,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAEL,MAAM,EACN,UAAU,EACV,MAAM,EAEN,QAAQ,GAGT,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"authz-rbac.module.js","sourceRoot":"","sources":["../src/authz-rbac.module.ts"],"names":[],"mappings":"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"}
|
package/dist/entities.d.ts
CHANGED
|
@@ -12,6 +12,8 @@ export declare const DEFAULT_TABLE_NAMES: {
|
|
|
12
12
|
readonly rolePermission: "authz_role_permission";
|
|
13
13
|
readonly userRole: "authz_user_role";
|
|
14
14
|
};
|
|
15
|
+
/** The tenant id of a GLOBAL role assignment (applies in every tenant). */
|
|
16
|
+
export declare const GLOBAL_TENANT = "";
|
|
15
17
|
/** Physical table names for the four authz tables. */
|
|
16
18
|
export interface AuthzTableNames {
|
|
17
19
|
roles: string;
|
|
@@ -82,6 +84,15 @@ export declare class UserRoleEntity {
|
|
|
82
84
|
*/
|
|
83
85
|
source: string;
|
|
84
86
|
}
|
|
87
|
+
/** Options for {@link createAuthzEntitySchemas}. */
|
|
88
|
+
export interface AuthzEntitySchemaOptions {
|
|
89
|
+
/**
|
|
90
|
+
* Add a `tenantId` column (default `''` = global) to the user-role pivot, in its primary key,
|
|
91
|
+
* so role assignments can be scoped to a tenant. Default `false`: the tables keep their shape
|
|
92
|
+
* and every assignment is global.
|
|
93
|
+
*/
|
|
94
|
+
tenantScoped?: boolean;
|
|
95
|
+
}
|
|
85
96
|
/** The four {@link EntitySchema} definitions produced by {@link createAuthzEntitySchemas}. */
|
|
86
97
|
export interface AuthzEntitySchemas {
|
|
87
98
|
role: EntitySchema<RoleEntity>;
|
|
@@ -108,8 +119,11 @@ export interface AuthzEntitySchemas {
|
|
|
108
119
|
* Going through the factory (rather than hand-writing `new EntitySchema({ tableName })`)
|
|
109
120
|
* keeps the custom repository binding and the index names attached to the renamed tables;
|
|
110
121
|
* a hand-rolled re-declaration silently drops both.
|
|
122
|
+
*
|
|
123
|
+
* `{ tenantScoped: true }` adds a `tenantId` column to the user-role pivot (in its primary key),
|
|
124
|
+
* so a role can be assigned per tenant. Pass `{}` as the names to keep the default table names.
|
|
111
125
|
*/
|
|
112
|
-
export declare function createAuthzEntitySchemas(tableNames?: Partial<AuthzTableNames
|
|
126
|
+
export declare function createAuthzEntitySchemas(tableNames?: Partial<AuthzTableNames>, options?: AuthzEntitySchemaOptions): AuthzEntitySchemas;
|
|
113
127
|
export declare const RoleEntitySchema: EntitySchema<RoleEntity, never>;
|
|
114
128
|
export declare const PermissionEntitySchema: EntitySchema<PermissionEntity, never>;
|
|
115
129
|
export declare const RolePermissionEntitySchema: EntitySchema<RolePermissionEntity, never>;
|
package/dist/entities.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../src/entities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;GAGG;AACH,qBAAa,UAAU;IACb,CAAC,oBAAoB,CAAC,CAAC,EAAE,mBAAmB,CAAC;IACrD,EAAE,EAAG,MAAM,CAAC;IACZ,IAAI,EAAG,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAG,IAAI,CAAC;CAClB;AAED,oGAAoG;AACpG,qBAAa,gBAAgB;IACnB,CAAC,oBAAoB,CAAC,CAAC,EAAE,yBAAyB,CAAC;IAC3D,EAAE,EAAG,MAAM,CAAC;IACZ,IAAI,EAAG,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAG,IAAI,CAAC;CAClB;AAED,uEAAuE;AACvE,qBAAa,oBAAoB;IACvB,CAAC,oBAAoB,CAAC,CAAC,EAAE,6BAA6B,CAAC;IAC/D,MAAM,EAAG,MAAM,CAAC;IAChB,YAAY,EAAG,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACjB,CAAC,oBAAoB,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACzD,QAAQ,EAAG,MAAM,CAAC;IAClB,MAAM,EAAG,MAAM,CAAC;IAChB,MAAM,EAAG,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAG,MAAM,CAAC;CACjB;AAED,8FAA8F;AAC9F,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/B,UAAU,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC3C,cAAc,EAAE,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACnD,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IACvC,qEAAqE;IACrE,GAAG,EAAE;QACH,YAAY,CAAC,UAAU,CAAC;QACxB,YAAY,CAAC,gBAAgB,CAAC;QAC9B,YAAY,CAAC,oBAAoB,CAAC;QAClC,YAAY,CAAC,cAAc,CAAC;KAC7B,CAAC;CACH;AAED
|
|
1
|
+
{"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../src/entities.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,aAAa,KAAK,CAAC;AAEhC,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH;;;GAGG;AACH,qBAAa,UAAU;IACb,CAAC,oBAAoB,CAAC,CAAC,EAAE,mBAAmB,CAAC;IACrD,EAAE,EAAG,MAAM,CAAC;IACZ,IAAI,EAAG,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAG,IAAI,CAAC;CAClB;AAED,oGAAoG;AACpG,qBAAa,gBAAgB;IACnB,CAAC,oBAAoB,CAAC,CAAC,EAAE,yBAAyB,CAAC;IAC3D,EAAE,EAAG,MAAM,CAAC;IACZ,IAAI,EAAG,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAG,IAAI,CAAC;CAClB;AAED,uEAAuE;AACvE,qBAAa,oBAAoB;IACvB,CAAC,oBAAoB,CAAC,CAAC,EAAE,6BAA6B,CAAC;IAC/D,MAAM,EAAG,MAAM,CAAC;IAChB,YAAY,EAAG,MAAM,CAAC;CACvB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACjB,CAAC,oBAAoB,CAAC,CAAC,EAAE,uBAAuB,CAAC;IACzD,QAAQ,EAAG,MAAM,CAAC;IAClB,MAAM,EAAG,MAAM,CAAC;IAChB,MAAM,EAAG,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,EAAG,MAAM,CAAC;CACjB;AAED,oDAAoD;AACpD,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,8FAA8F;AAC9F,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAC/B,UAAU,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAC3C,cAAc,EAAE,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACnD,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,CAAC;IACvC,qEAAqE;IACrE,GAAG,EAAE;QACH,YAAY,CAAC,UAAU,CAAC;QACxB,YAAY,CAAC,gBAAgB,CAAC;QAC9B,YAAY,CAAC,oBAAoB,CAAC;QAClC,YAAY,CAAC,cAAc,CAAC;KAC7B,CAAC;CACH;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,GAAE,OAAO,CAAC,eAAe,CAAM,EACzC,OAAO,GAAE,wBAA6B,GACrC,kBAAkB,CAgFpB;AAID,eAAO,MAAM,gBAAgB,iCAAsB,CAAC;AACpD,eAAO,MAAM,sBAAsB,uCAA4B,CAAC;AAChE,eAAO,MAAM,0BAA0B,2CAAgC,CAAC;AACxE,eAAO,MAAM,oBAAoB,qCAA0B,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,cAAc,0JAAqB,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,2GAKvB,CAAC"}
|
package/dist/entities.js
CHANGED
|
@@ -13,6 +13,8 @@ export const DEFAULT_TABLE_NAMES = {
|
|
|
13
13
|
rolePermission: 'authz_role_permission',
|
|
14
14
|
userRole: 'authz_user_role',
|
|
15
15
|
};
|
|
16
|
+
/** The tenant id of a GLOBAL role assignment (applies in every tenant). */
|
|
17
|
+
export const GLOBAL_TENANT = '';
|
|
16
18
|
/**
|
|
17
19
|
* The entities are described with {@link EntitySchema} (the schema-first definition style)
|
|
18
20
|
* rather than property decorators. This is the ONE definition surface that lives entirely
|
|
@@ -84,8 +86,11 @@ export class UserRoleEntity {
|
|
|
84
86
|
* Going through the factory (rather than hand-writing `new EntitySchema({ tableName })`)
|
|
85
87
|
* keeps the custom repository binding and the index names attached to the renamed tables;
|
|
86
88
|
* a hand-rolled re-declaration silently drops both.
|
|
89
|
+
*
|
|
90
|
+
* `{ tenantScoped: true }` adds a `tenantId` column to the user-role pivot (in its primary key),
|
|
91
|
+
* so a role can be assigned per tenant. Pass `{}` as the names to keep the default table names.
|
|
87
92
|
*/
|
|
88
|
-
export function createAuthzEntitySchemas(tableNames = {}) {
|
|
93
|
+
export function createAuthzEntitySchemas(tableNames = {}, options = {}) {
|
|
89
94
|
const names = { ...DEFAULT_TABLE_NAMES, ...tableNames };
|
|
90
95
|
const role = new EntitySchema({
|
|
91
96
|
class: RoleEntity,
|
|
@@ -145,6 +150,14 @@ export function createAuthzEntitySchemas(tableNames = {}) {
|
|
|
145
150
|
},
|
|
146
151
|
indexes: [{ name: `${names.userRole}_user_idx`, properties: ['userType', 'userId'] }],
|
|
147
152
|
});
|
|
153
|
+
if (options.tenantScoped) {
|
|
154
|
+
// `tenantId` is not a field of the class (the default schemas don't map it), hence the cast.
|
|
155
|
+
userRole.addProperty('tenantId', 'string', {
|
|
156
|
+
length: 191,
|
|
157
|
+
primary: true,
|
|
158
|
+
default: GLOBAL_TENANT,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
148
161
|
return {
|
|
149
162
|
role,
|
|
150
163
|
permission,
|
package/dist/entities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../src/entities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAwB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,aAAa;IACpB,WAAW,EAAE,mBAAmB;IAChC,cAAc,EAAE,uBAAuB;IACvC,QAAQ,EAAE,iBAAiB;CACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"entities.js","sourceRoot":"","sources":["../src/entities.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
export { AUTHZ_ENTITIES, AUTHZ_ENTITY_CLASSES, createAuthzEntitySchemas, DEFAULT_TABLE_NAMES, PermissionEntity, PermissionEntitySchema, RoleEntity, RoleEntitySchema, RolePermissionEntity, RolePermissionEntitySchema, UserRoleEntity, UserRoleEntitySchema, } from './entities.js';
|
|
2
|
-
export type { AuthzEntitySchemas, AuthzTableNames } from './entities.js';
|
|
1
|
+
export { AUTHZ_ENTITIES, AUTHZ_ENTITY_CLASSES, createAuthzEntitySchemas, DEFAULT_TABLE_NAMES, GLOBAL_TENANT, PermissionEntity, PermissionEntitySchema, RoleEntity, RoleEntitySchema, RolePermissionEntity, RolePermissionEntitySchema, UserRoleEntity, UserRoleEntitySchema, } from './entities.js';
|
|
2
|
+
export type { AuthzEntitySchemaOptions, AuthzEntitySchemas, AuthzTableNames, } from './entities.js';
|
|
3
3
|
export { AuthzPermissionRepository, AuthzRolePermissionRepository, AuthzRoleRepository, AuthzUserRoleRepository, } from './repositories.js';
|
|
4
4
|
export { authzSchemaSql, ensureAuthzSchema } from './schema.js';
|
|
5
5
|
export { MikroOrmAuthzStore } from './mikro-orm-authz.store.js';
|
|
6
|
-
export type { RoleAssignment, RoleAssignmentFilter, RoleSourceOptions, UserAuthz, UserRoleAssignment, } from './mikro-orm-authz.store.js';
|
|
6
|
+
export type { RoleAssignment, RoleAssignmentFilter, RoleSourceOptions, TenantScope, UserAuthz, UserRoleAssignment, } from './mikro-orm-authz.store.js';
|
|
7
7
|
export { AUTHZ_RBAC_OPTIONS, AUTHZ_RBAC_STORE, AuthzRbacModule, defaultUserRefMapper, } from './authz-rbac.module.js';
|
|
8
8
|
export type { AuthzRbacModuleAsyncOptions, AuthzRbacModuleOptions, UserRefMapper, } from './authz-rbac.module.js';
|
|
9
9
|
export type { AuthzStoreOptions } from './types.js';
|
|
10
|
+
export type { AuthzTenancyOption, TenantResolver } from './tenancy.js';
|
|
10
11
|
export type { UserRef, UserRefInput } from '@dudousxd/nestjs-authz/store-kit';
|
|
11
12
|
export { applyScope, compileScope } from './scope.js';
|
|
12
13
|
export type { ScopeResolver } from './scope.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,GAChB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,SAAS,EACT,kBAAkB,GACnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,GACd,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACvE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AUTHZ_ENTITIES, AUTHZ_ENTITY_CLASSES, createAuthzEntitySchemas, DEFAULT_TABLE_NAMES, PermissionEntity, PermissionEntitySchema, RoleEntity, RoleEntitySchema, RolePermissionEntity, RolePermissionEntitySchema, UserRoleEntity, UserRoleEntitySchema, } from './entities.js';
|
|
1
|
+
export { AUTHZ_ENTITIES, AUTHZ_ENTITY_CLASSES, createAuthzEntitySchemas, DEFAULT_TABLE_NAMES, GLOBAL_TENANT, PermissionEntity, PermissionEntitySchema, RoleEntity, RoleEntitySchema, RolePermissionEntity, RolePermissionEntitySchema, UserRoleEntity, UserRoleEntitySchema, } from './entities.js';
|
|
2
2
|
// VALUE exports on purpose: these classes are the DI tokens `MikroOrmModule.forFeature()`
|
|
3
3
|
// registers, so `export type` would compile green and be `undefined` at runtime.
|
|
4
4
|
export { AuthzPermissionRepository, AuthzRolePermissionRepository, AuthzRoleRepository, AuthzUserRoleRepository, } from './repositories.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAMvB,0FAA0F;AAC1F,iFAAiF;AACjF,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAShE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAShC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import { type RoleAssignment, type RoleAssignmentFilter, type UserAuthz, type UserRef, type UserRoleAssignment } from '@dudousxd/nestjs-authz/store-kit';
|
|
2
2
|
import type { EntityManager } from '@mikro-orm/core';
|
|
3
3
|
export type { RoleAssignment, RoleAssignmentFilter, UserAuthz, UserRoleAssignment };
|
|
4
|
-
/**
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Optional tenant scope for a query. Omitted → the GLOBAL scope (only global assignments; a
|
|
6
|
+
* tenant-scoped role never leaks into an unscoped check). With a `tenantId`, global assignments
|
|
7
|
+
* AND that tenant's apply. Needs entities built with `tenantScoped: true`; without that column
|
|
8
|
+
* every assignment is global.
|
|
9
|
+
*/
|
|
10
|
+
export interface TenantScope {
|
|
11
|
+
tenantId?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Assignment source (default `'manual'`, see `setUserRoles`) and tenant for role mutations.
|
|
15
|
+
* `tenantId` scopes the assignment to one tenant; it needs entities built with
|
|
16
|
+
* `createAuthzEntitySchemas(names, { tenantScoped: true })`.
|
|
17
|
+
*/
|
|
18
|
+
export interface RoleSourceOptions extends TenantScope {
|
|
6
19
|
source?: string;
|
|
7
20
|
}
|
|
8
21
|
/**
|
|
@@ -19,6 +32,14 @@ export declare class MikroOrmAuthzStore {
|
|
|
19
32
|
constructor(em: EntityManager, _opts?: Record<string, never>);
|
|
20
33
|
/** Create/upgrade the RBAC tables (non-destructive, delegates to {@link ensureAuthzSchema}). */
|
|
21
34
|
ensureSchema(): Promise<void>;
|
|
35
|
+
/** True when the user-role entity maps `tenantId` (built with `tenantScoped: true`). */
|
|
36
|
+
private tenantScoped;
|
|
37
|
+
/** The `tenantId` value of a written assignment (`{}` without the column). */
|
|
38
|
+
private tenantValue;
|
|
39
|
+
/** Assignments visible in a scope: global ones, plus the tenant's own when one is given. */
|
|
40
|
+
private tenantWhere;
|
|
41
|
+
/** The public `tenantId` of a stored row: `null` for a global assignment. */
|
|
42
|
+
private static rowTenant;
|
|
22
43
|
/**
|
|
23
44
|
* Create the role if absent; returns its id. Idempotent and race-tolerant: it re-reads
|
|
24
45
|
* by the unique `name` after a create so two concurrent creators converge on the same row.
|
|
@@ -53,12 +74,15 @@ export declare class MikroOrmAuthzStore {
|
|
|
53
74
|
getRolePermissions(roleNames: readonly string[]): Promise<Record<string, string[]>>;
|
|
54
75
|
/**
|
|
55
76
|
* Assign a role to a user (creating the role by name if needed). Idempotent. `{ source }`
|
|
56
|
-
* (default `'manual'`) records where the assignment came from.
|
|
77
|
+
* (default `'manual'`) records where the assignment came from. `{ tenantId }` scopes it to that
|
|
78
|
+
* tenant; omitted, the assignment is global (applies in every tenant).
|
|
57
79
|
*/
|
|
58
80
|
assignRole(user: UserRef, roleName: string, opts?: RoleSourceOptions): Promise<void>;
|
|
59
81
|
/**
|
|
60
82
|
* Remove a role from a user. No-op if the role or assignment is absent. With `{ source }` only
|
|
61
|
-
* that source's assignment goes; without it, the role is removed from every source.
|
|
83
|
+
* that source's assignment goes; without it, the role is removed from every source. With
|
|
84
|
+
* tenant-scoped entities, `{ tenantId }` removes the assignment in that tenant and omitting it
|
|
85
|
+
* removes the global one.
|
|
62
86
|
*/
|
|
63
87
|
removeRole(user: UserRef, roleName: string, opts?: RoleSourceOptions): Promise<void>;
|
|
64
88
|
/**
|
|
@@ -66,17 +90,23 @@ export declare class MikroOrmAuthzStore {
|
|
|
66
90
|
* `roleNames` — e.g. an SSO/SCIM sync calls `setUserRoles(user, mappedRoles, { source: 'sso' })`
|
|
67
91
|
* on every login. Other sources' assignments are untouched, so a role held both manually and via
|
|
68
92
|
* SSO survives an SSO sync that drops it. Roles are created by name when missing. Transactional.
|
|
93
|
+
* With tenant-scoped entities it replaces the assignments of one tenant (`{ tenantId }`), or the
|
|
94
|
+
* global ones when omitted.
|
|
69
95
|
*/
|
|
70
96
|
setUserRoles(user: UserRef, roleNames: readonly string[], opts?: RoleSourceOptions): Promise<void>;
|
|
71
|
-
/**
|
|
72
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Every role assignment of a user visible in a tenant scope (global ones always; the tenant's
|
|
99
|
+
* own with `{ tenantId }`), one entry per `(role, source, tenant)`.
|
|
100
|
+
*/
|
|
101
|
+
getRoleAssignments(user: UserRef, scope?: TenantScope): Promise<RoleAssignment[]>;
|
|
73
102
|
/**
|
|
74
103
|
* Raw role-assignment rows for admin listings — e.g. who holds a role (`{ role: 'admin' }`) or
|
|
75
104
|
* a user's assignments with their sources (`{ user }`). `role` accepts one name or a list;
|
|
76
105
|
* `user` and `source` narrow further. Ordered by `(userType, userId, role, source)`.
|
|
77
106
|
*
|
|
78
|
-
*
|
|
79
|
-
*
|
|
107
|
+
* `tenantId`: omitted = no tenant filter; `null` = global assignments only; a string = exactly
|
|
108
|
+
* that tenant's scoped assignments. Without tenant-scoped entities every row is global
|
|
109
|
+
* (`tenantId: null`), so a tenant id string matches nothing.
|
|
80
110
|
*/
|
|
81
111
|
listRoleAssignments(filter?: RoleAssignmentFilter): Promise<UserRoleAssignment[]>;
|
|
82
112
|
/**
|
|
@@ -84,8 +114,8 @@ export declare class MikroOrmAuthzStore {
|
|
|
84
114
|
* Roles and permissions are kept. (This adapter has no direct user permissions.)
|
|
85
115
|
*/
|
|
86
116
|
removeUser(user: UserRef): Promise<void>;
|
|
87
|
-
/** The role names a user holds. */
|
|
88
|
-
getRolesForUser(user: UserRef): Promise<string[]>;
|
|
117
|
+
/** The role names a user holds, in a tenant scope (see {@link TenantScope}). */
|
|
118
|
+
getRolesForUser(user: UserRef, scope?: TenantScope): Promise<string[]>;
|
|
89
119
|
/**
|
|
90
120
|
* The flattened, distinct permission names a user has via their roles.
|
|
91
121
|
*
|
|
@@ -95,10 +125,10 @@ export declare class MikroOrmAuthzStore {
|
|
|
95
125
|
* returned set is the FULL granted permission name set, deduped — callers (incl. the
|
|
96
126
|
* wildcard matcher) rely on getting every granted name (e.g. a granted `posts.*`).
|
|
97
127
|
*/
|
|
98
|
-
getPermissionsForUser(user: UserRef): Promise<string[]>;
|
|
99
|
-
/** A user's roles + effective permissions in one shot. */
|
|
100
|
-
getUserAuthz(user: UserRef): Promise<UserAuthz>;
|
|
101
|
-
/** True when the user holds `permission` through any of their roles. */
|
|
102
|
-
userHasPermission(user: UserRef, permission: string): Promise<boolean>;
|
|
128
|
+
getPermissionsForUser(user: UserRef, scope?: TenantScope): Promise<string[]>;
|
|
129
|
+
/** A user's roles + effective permissions in one shot, in a tenant scope. */
|
|
130
|
+
getUserAuthz(user: UserRef, scope?: TenantScope): Promise<UserAuthz>;
|
|
131
|
+
/** True when the user holds `permission` through any of their roles, in a tenant scope. */
|
|
132
|
+
userHasPermission(user: UserRef, permission: string, scope?: TenantScope): Promise<boolean>;
|
|
103
133
|
}
|
|
104
134
|
//# sourceMappingURL=mikro-orm-authz.store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mikro-orm-authz.store.d.ts","sourceRoot":"","sources":["../src/mikro-orm-authz.store.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,kBAAkB,EAIxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"mikro-orm-authz.store.d.ts","sourceRoot":"","sources":["../src/mikro-orm-authz.store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { DEFAULT_ROLE_SOURCE, compareUserRoleAssignments, normalizeUserRef, roleFilterNames, } from '@dudousxd/nestjs-authz/store-kit';
|
|
3
|
-
import { PermissionEntity, RoleEntity, RolePermissionEntity, UserRoleEntity } from './entities.js';
|
|
3
|
+
import { GLOBAL_TENANT, PermissionEntity, RoleEntity, RolePermissionEntity, UserRoleEntity, } from './entities.js';
|
|
4
4
|
import { ensureAuthzSchema } from './schema.js';
|
|
5
|
+
const TENANT_COLUMN_MISSING = 'MikroOrmAuthzStore: a tenant-scoped role assignment needs the tenantId column. Build the ' +
|
|
6
|
+
'entities with createAuthzEntitySchemas(names, { tenantScoped: true }) and widen the ' +
|
|
7
|
+
"user-role primary key (see the package README, 'Tenant-scoped roles').";
|
|
5
8
|
/**
|
|
6
9
|
* MikroORM-backed RBAC store. A plain POJO that receives the `EntityManager` in its
|
|
7
10
|
* constructor — NOT `@Injectable`, no internal connection token (the app owns the
|
|
@@ -22,6 +25,33 @@ export class MikroOrmAuthzStore {
|
|
|
22
25
|
ensureSchema() {
|
|
23
26
|
return ensureAuthzSchema(this.em);
|
|
24
27
|
}
|
|
28
|
+
// --- tenant scoping ---
|
|
29
|
+
/** True when the user-role entity maps `tenantId` (built with `tenantScoped: true`). */
|
|
30
|
+
tenantScoped(em) {
|
|
31
|
+
return em.getMetadata().find(UserRoleEntity.name)?.properties.tenantId !== undefined;
|
|
32
|
+
}
|
|
33
|
+
/** The `tenantId` value of a written assignment (`{}` without the column). */
|
|
34
|
+
tenantValue(em, tenantId) {
|
|
35
|
+
if (this.tenantScoped(em))
|
|
36
|
+
return { tenantId: tenantId ?? GLOBAL_TENANT };
|
|
37
|
+
if (tenantId !== undefined && tenantId !== GLOBAL_TENANT) {
|
|
38
|
+
throw new Error(TENANT_COLUMN_MISSING);
|
|
39
|
+
}
|
|
40
|
+
return {};
|
|
41
|
+
}
|
|
42
|
+
/** Assignments visible in a scope: global ones, plus the tenant's own when one is given. */
|
|
43
|
+
tenantWhere(em, scope) {
|
|
44
|
+
if (!this.tenantScoped(em))
|
|
45
|
+
return {};
|
|
46
|
+
const tenantId = scope?.tenantId ?? GLOBAL_TENANT;
|
|
47
|
+
return tenantId === GLOBAL_TENANT
|
|
48
|
+
? { tenantId: GLOBAL_TENANT }
|
|
49
|
+
: { tenantId: { $in: [GLOBAL_TENANT, tenantId] } };
|
|
50
|
+
}
|
|
51
|
+
/** The public `tenantId` of a stored row: `null` for a global assignment. */
|
|
52
|
+
static rowTenant(row) {
|
|
53
|
+
return row.tenantId === undefined || row.tenantId === GLOBAL_TENANT ? null : row.tenantId;
|
|
54
|
+
}
|
|
25
55
|
// --- roles & permissions (idempotent upserts by name) ---
|
|
26
56
|
/**
|
|
27
57
|
* Create the role if absent; returns its id. Idempotent and race-tolerant: it re-reads
|
|
@@ -180,37 +210,47 @@ export class MikroOrmAuthzStore {
|
|
|
180
210
|
// --- user ↔ role ---
|
|
181
211
|
/**
|
|
182
212
|
* Assign a role to a user (creating the role by name if needed). Idempotent. `{ source }`
|
|
183
|
-
* (default `'manual'`) records where the assignment came from.
|
|
213
|
+
* (default `'manual'`) records where the assignment came from. `{ tenantId }` scopes it to that
|
|
214
|
+
* tenant; omitted, the assignment is global (applies in every tenant).
|
|
184
215
|
*/
|
|
185
216
|
async assignRole(user, roleName, opts) {
|
|
186
217
|
const { type, id } = normalizeUserRef(user);
|
|
218
|
+
const em = this.em.fork();
|
|
219
|
+
const tenant = this.tenantValue(em, opts?.tenantId);
|
|
187
220
|
const roleId = await this.createRole(roleName);
|
|
188
221
|
const source = opts?.source ?? DEFAULT_ROLE_SOURCE;
|
|
189
|
-
const em = this.em.fork();
|
|
190
222
|
const existing = await em.findOne(UserRoleEntity, {
|
|
191
223
|
userType: type,
|
|
192
224
|
userId: id,
|
|
193
225
|
roleId,
|
|
194
226
|
source,
|
|
227
|
+
...tenant,
|
|
195
228
|
});
|
|
196
229
|
if (existing)
|
|
197
230
|
return;
|
|
198
|
-
em.create(UserRoleEntity, { userType: type, userId: id, roleId, source });
|
|
231
|
+
em.create(UserRoleEntity, { userType: type, userId: id, roleId, source, ...tenant });
|
|
199
232
|
await em.flush();
|
|
200
233
|
}
|
|
201
234
|
/**
|
|
202
235
|
* Remove a role from a user. No-op if the role or assignment is absent. With `{ source }` only
|
|
203
|
-
* that source's assignment goes; without it, the role is removed from every source.
|
|
236
|
+
* that source's assignment goes; without it, the role is removed from every source. With
|
|
237
|
+
* tenant-scoped entities, `{ tenantId }` removes the assignment in that tenant and omitting it
|
|
238
|
+
* removes the global one.
|
|
204
239
|
*/
|
|
205
240
|
async removeRole(user, roleName, opts) {
|
|
206
241
|
const { type, id } = normalizeUserRef(user);
|
|
242
|
+
const em = this.em.fork();
|
|
243
|
+
if (!this.tenantScoped(em) && opts?.tenantId !== undefined && opts.tenantId !== GLOBAL_TENANT) {
|
|
244
|
+
return; // no tenant column: there is no tenant-scoped assignment to remove
|
|
245
|
+
}
|
|
207
246
|
const roleId = await this.findRoleId(roleName);
|
|
208
247
|
if (!roleId)
|
|
209
248
|
return;
|
|
210
|
-
await
|
|
249
|
+
await em.nativeDelete(UserRoleEntity, {
|
|
211
250
|
userType: type,
|
|
212
251
|
userId: id,
|
|
213
252
|
roleId,
|
|
253
|
+
...this.tenantValue(em, opts?.tenantId),
|
|
214
254
|
...(opts?.source !== undefined ? { source: opts.source } : {}),
|
|
215
255
|
});
|
|
216
256
|
}
|
|
@@ -219,48 +259,70 @@ export class MikroOrmAuthzStore {
|
|
|
219
259
|
* `roleNames` — e.g. an SSO/SCIM sync calls `setUserRoles(user, mappedRoles, { source: 'sso' })`
|
|
220
260
|
* on every login. Other sources' assignments are untouched, so a role held both manually and via
|
|
221
261
|
* SSO survives an SSO sync that drops it. Roles are created by name when missing. Transactional.
|
|
262
|
+
* With tenant-scoped entities it replaces the assignments of one tenant (`{ tenantId }`), or the
|
|
263
|
+
* global ones when omitted.
|
|
222
264
|
*/
|
|
223
265
|
async setUserRoles(user, roleNames, opts) {
|
|
224
266
|
const { type, id } = normalizeUserRef(user);
|
|
225
267
|
const source = opts?.source ?? DEFAULT_ROLE_SOURCE;
|
|
268
|
+
const em = this.em.fork();
|
|
269
|
+
const tenant = this.tenantValue(em, opts?.tenantId);
|
|
226
270
|
const roleIds = [];
|
|
227
271
|
for (const name of new Set(roleNames))
|
|
228
272
|
roleIds.push(await this.createRole(name));
|
|
229
|
-
await
|
|
230
|
-
await tx.nativeDelete(UserRoleEntity, { userType: type, userId: id, source });
|
|
273
|
+
await em.transactional(async (tx) => {
|
|
274
|
+
await tx.nativeDelete(UserRoleEntity, { userType: type, userId: id, source, ...tenant });
|
|
231
275
|
for (const roleId of roleIds) {
|
|
232
|
-
tx.create(UserRoleEntity, { userType: type, userId: id, roleId, source });
|
|
276
|
+
tx.create(UserRoleEntity, { userType: type, userId: id, roleId, source, ...tenant });
|
|
233
277
|
}
|
|
234
278
|
await tx.flush();
|
|
235
279
|
});
|
|
236
280
|
}
|
|
237
|
-
/**
|
|
238
|
-
|
|
281
|
+
/**
|
|
282
|
+
* Every role assignment of a user visible in a tenant scope (global ones always; the tenant's
|
|
283
|
+
* own with `{ tenantId }`), one entry per `(role, source, tenant)`.
|
|
284
|
+
*/
|
|
285
|
+
async getRoleAssignments(user, scope) {
|
|
239
286
|
const { type, id } = normalizeUserRef(user);
|
|
240
287
|
const em = this.em.fork();
|
|
241
|
-
const assignments = await em.find(UserRoleEntity, {
|
|
288
|
+
const assignments = await em.find(UserRoleEntity, {
|
|
289
|
+
userType: type,
|
|
290
|
+
userId: id,
|
|
291
|
+
...this.tenantWhere(em, scope),
|
|
292
|
+
});
|
|
242
293
|
if (assignments.length === 0)
|
|
243
294
|
return [];
|
|
244
295
|
const roles = await em.find(RoleEntity, { id: { $in: assignments.map((a) => a.roleId) } });
|
|
245
296
|
const nameById = new Map(roles.map((r) => [r.id, r.name]));
|
|
246
297
|
return assignments
|
|
247
298
|
.filter((a) => nameById.has(a.roleId))
|
|
248
|
-
.map((a) => ({
|
|
249
|
-
|
|
299
|
+
.map((a) => ({
|
|
300
|
+
role: nameById.get(a.roleId),
|
|
301
|
+
source: a.source,
|
|
302
|
+
tenantId: MikroOrmAuthzStore.rowTenant(a),
|
|
303
|
+
}))
|
|
304
|
+
.sort((a, b) => a.role.localeCompare(b.role) ||
|
|
305
|
+
a.source.localeCompare(b.source) ||
|
|
306
|
+
(a.tenantId ?? '').localeCompare(b.tenantId ?? ''));
|
|
250
307
|
}
|
|
251
308
|
/**
|
|
252
309
|
* Raw role-assignment rows for admin listings — e.g. who holds a role (`{ role: 'admin' }`) or
|
|
253
310
|
* a user's assignments with their sources (`{ user }`). `role` accepts one name or a list;
|
|
254
311
|
* `user` and `source` narrow further. Ordered by `(userType, userId, role, source)`.
|
|
255
312
|
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
313
|
+
* `tenantId`: omitted = no tenant filter; `null` = global assignments only; a string = exactly
|
|
314
|
+
* that tenant's scoped assignments. Without tenant-scoped entities every row is global
|
|
315
|
+
* (`tenantId: null`), so a tenant id string matches nothing.
|
|
258
316
|
*/
|
|
259
317
|
async listRoleAssignments(filter = {}) {
|
|
260
|
-
if (typeof filter.tenantId === 'string')
|
|
261
|
-
return [];
|
|
262
318
|
const em = this.em.fork();
|
|
263
319
|
const where = {};
|
|
320
|
+
if (filter.tenantId !== undefined) {
|
|
321
|
+
if (this.tenantScoped(em))
|
|
322
|
+
where.tenantId = filter.tenantId ?? GLOBAL_TENANT;
|
|
323
|
+
else if (filter.tenantId !== null)
|
|
324
|
+
return [];
|
|
325
|
+
}
|
|
264
326
|
const roleNames = roleFilterNames(filter.role);
|
|
265
327
|
if (roleNames !== undefined) {
|
|
266
328
|
if (roleNames.length === 0)
|
|
@@ -291,7 +353,7 @@ export class MikroOrmAuthzStore {
|
|
|
291
353
|
userId: a.userId,
|
|
292
354
|
role: nameById.get(a.roleId),
|
|
293
355
|
source: a.source,
|
|
294
|
-
tenantId:
|
|
356
|
+
tenantId: MikroOrmAuthzStore.rowTenant(a),
|
|
295
357
|
}))
|
|
296
358
|
.sort(compareUserRoleAssignments);
|
|
297
359
|
}
|
|
@@ -304,14 +366,18 @@ export class MikroOrmAuthzStore {
|
|
|
304
366
|
await this.em.fork().nativeDelete(UserRoleEntity, { userType: type, userId: id });
|
|
305
367
|
}
|
|
306
368
|
// --- queries ---
|
|
307
|
-
/** The role names a user holds. */
|
|
308
|
-
async getRolesForUser(user) {
|
|
369
|
+
/** The role names a user holds, in a tenant scope (see {@link TenantScope}). */
|
|
370
|
+
async getRolesForUser(user, scope) {
|
|
309
371
|
const { type, id } = normalizeUserRef(user);
|
|
310
372
|
const em = this.em.fork();
|
|
311
|
-
const assignments = await em.find(UserRoleEntity, {
|
|
373
|
+
const assignments = await em.find(UserRoleEntity, {
|
|
374
|
+
userType: type,
|
|
375
|
+
userId: id,
|
|
376
|
+
...this.tenantWhere(em, scope),
|
|
377
|
+
});
|
|
312
378
|
if (assignments.length === 0)
|
|
313
379
|
return [];
|
|
314
|
-
const roleIds = assignments.map((a) => a.roleId);
|
|
380
|
+
const roleIds = [...new Set(assignments.map((a) => a.roleId))];
|
|
315
381
|
const roles = await em.find(RoleEntity, { id: { $in: roleIds } });
|
|
316
382
|
return roles.map((r) => r.name);
|
|
317
383
|
}
|
|
@@ -324,7 +390,7 @@ export class MikroOrmAuthzStore {
|
|
|
324
390
|
* returned set is the FULL granted permission name set, deduped — callers (incl. the
|
|
325
391
|
* wildcard matcher) rely on getting every granted name (e.g. a granted `posts.*`).
|
|
326
392
|
*/
|
|
327
|
-
async getPermissionsForUser(user) {
|
|
393
|
+
async getPermissionsForUser(user, scope) {
|
|
328
394
|
const { type, id } = normalizeUserRef(user);
|
|
329
395
|
const em = this.em.fork();
|
|
330
396
|
// Derive physical table + column names from metadata so we honor re-decorated entities.
|
|
@@ -349,27 +415,42 @@ export class MikroOrmAuthzStore {
|
|
|
349
415
|
const urRoleId = col(userRole, 'roleId');
|
|
350
416
|
const urUserType = col(userRole, 'userType');
|
|
351
417
|
const urUserId = col(userRole, 'userId');
|
|
418
|
+
// Tenant scope: global assignments, plus the tenant's own when one is given.
|
|
419
|
+
const params = [type, id];
|
|
420
|
+
let tenantSql = '';
|
|
421
|
+
if (this.tenantScoped(em)) {
|
|
422
|
+
const urTenant = col(userRole, 'tenantId');
|
|
423
|
+
const tenantId = scope?.tenantId ?? GLOBAL_TENANT;
|
|
424
|
+
if (tenantId === GLOBAL_TENANT) {
|
|
425
|
+
tenantSql = ` and ur.${urTenant} = ?`;
|
|
426
|
+
params.push(GLOBAL_TENANT);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
tenantSql = ` and ur.${urTenant} in (?, ?)`;
|
|
430
|
+
params.push(GLOBAL_TENANT, tenantId);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
352
433
|
// Single round-trip: permission ← rolePermission ← userRole. Identifiers come from
|
|
353
434
|
// entity metadata (trusted), values are bound as parameters (no SQL injection surface).
|
|
354
435
|
const sql = `select distinct p.${permName} as name ` +
|
|
355
436
|
`from ${permTable} p ` +
|
|
356
437
|
`inner join ${rpTable} rp on rp.${rpPermId} = p.${permId} ` +
|
|
357
438
|
`inner join ${urTable} ur on ur.${urRoleId} = rp.${rpRoleId} ` +
|
|
358
|
-
`where ur.${urUserType} = ? and ur.${urUserId} =
|
|
359
|
-
const rows = (await em.getConnection().execute(sql,
|
|
439
|
+
`where ur.${urUserType} = ? and ur.${urUserId} = ?${tenantSql}`;
|
|
440
|
+
const rows = (await em.getConnection().execute(sql, params));
|
|
360
441
|
return [...new Set(rows.map((r) => r.name))];
|
|
361
442
|
}
|
|
362
|
-
/** A user's roles + effective permissions in one shot. */
|
|
363
|
-
async getUserAuthz(user) {
|
|
443
|
+
/** A user's roles + effective permissions in one shot, in a tenant scope. */
|
|
444
|
+
async getUserAuthz(user, scope) {
|
|
364
445
|
const [roles, permissions] = await Promise.all([
|
|
365
|
-
this.getRolesForUser(user),
|
|
366
|
-
this.getPermissionsForUser(user),
|
|
446
|
+
this.getRolesForUser(user, scope),
|
|
447
|
+
this.getPermissionsForUser(user, scope),
|
|
367
448
|
]);
|
|
368
449
|
return { roles, permissions };
|
|
369
450
|
}
|
|
370
|
-
/** True when the user holds `permission` through any of their roles. */
|
|
371
|
-
async userHasPermission(user, permission) {
|
|
372
|
-
const permissions = await this.getPermissionsForUser(user);
|
|
451
|
+
/** True when the user holds `permission` through any of their roles, in a tenant scope. */
|
|
452
|
+
async userHasPermission(user, permission, scope) {
|
|
453
|
+
const permissions = await this.getPermissionsForUser(user, scope);
|
|
373
454
|
return permissions.includes(permission);
|
|
374
455
|
}
|
|
375
456
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mikro-orm-authz.store.js","sourceRoot":"","sources":["../src/mikro-orm-authz.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,mBAAmB,EAMnB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAWhD;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IAIV;IAHnB,2FAA2F;IAC3F,qFAAqF;IACrF,YACmB,EAAiB,EAClC,QAA+B,EAAE;QADhB,OAAE,GAAF,EAAE,CAAe;IAEjC,CAAC;IAEJ,gGAAgG;IAChG,YAAY;QACV,OAAO,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,2DAA2D;IAE3D;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,IAAY;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE;YACnC,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI;YACJ,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,kFAAkF;QACpF,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,IAAI,CAAC,CAAC;QACxE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,qFAAqF;IACrF,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACjC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE;YACzC,EAAE,EAAE,UAAU,EAAE;YAChB,IAAI;YACJ,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,IAAI,IAAI,EAAE;SACtB,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,kFAAkF;QACpF,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,IAAI,CAAC,CAAC;QAC9E,OAAO,EAAE,CAAC;IACZ,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAY;QACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,OAAO,GAAG,EAAE,EAAE,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAY;QACzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,OAAO,GAAG,EAAE,EAAE,CAAC;IACjB,CAAC;IAED,4BAA4B;IAE5B,kFAAkF;IAClF,KAAK,CAAC,oBAAoB,CAAC,QAAgB,EAAE,cAAsB;QACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAClF,IAAI,QAAQ;YAAE,OAAO;QACrB,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1D,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED,gFAAgF;IAChF,KAAK,CAAC,wBAAwB,CAAC,QAAgB,EAAE,cAAsB;QACrE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY;YAAE,OAAO;QACrC,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACpF,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC/C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC9D,IAAI,CAAC,IAAI;gBAAE,OAAO,KAAK,CAAC;YACxB,MAAM,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,MAAM,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;YACnD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,mBAAmB,CAAC,QAAgB,EAAE,eAAkC;QAC5E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;YAC5C,aAAa,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC9C,MAAM,EAAE,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;gBACzC,EAAE,CAAC,MAAM,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,kBAAkB,CAAC,SAA4B;QACnD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACtC,MAAM,GAAG,GAA6B,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,GAAG,CAAC;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,CAAC,CAAc,EAAE,IAAY,EAAU,EAAE;YACnD,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;YAClF,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,oFAAoF;QACpF,MAAM,GAAG,GACP,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,iBAAiB;YAC9E,QAAQ,IAAI,CAAC,SAAS,KAAK;YAC3B,aAAa,QAAQ,CAAC,SAAS,aAAa,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;YAC7F,aAAa,IAAI,CAAC,SAAS,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,GAAG;YAC9F,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACzE,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAGxD,CAAC;QACH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,IAAI,GAAG,EAAE,CAAC;gBACV,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACvB,CAAC;YACD,IAAI,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACzF,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,sBAAsB;IAEtB;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,IAAa,EAAE,QAAgB,EAAE,IAAwB;QACxE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,mBAAmB,CAAC;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE;YAChD,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE;YACV,MAAM;YACN,MAAM;SACP,CAAC,CAAC;QACH,IAAI,QAAQ;YAAE,OAAO;QACrB,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,IAAa,EAAE,QAAgB,EAAE,IAAwB;QACxE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE;YAChD,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,EAAE;YACV,MAAM;YACN,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/D,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY,CAChB,IAAa,EACb,SAA4B,EAC5B,IAAwB;QAExB,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,IAAI,mBAAmB,CAAC;QACnD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC9C,MAAM,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YAC9E,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uEAAuE;IACvE,KAAK,CAAC,kBAAkB,CAAC,IAAa;QACpC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3F,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAW,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;aAC1F,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACtF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,mBAAmB,CAAC,SAA+B,EAAE;QACzD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,EAAE,CAAC;QACnD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,KAAK,GAA4B,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YAClC,KAAK,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnD,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;YACtB,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QACpB,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC9D,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE;YACtC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;SAC5D,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,WAAW;aACf,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAW;YACtC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;aACF,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACtC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,IAAa;QAC5B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,kBAAkB;IAElB,mCAAmC;IACnC,KAAK,CAAC,eAAe,CAAC,IAAa;QACjC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QAClF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QAClE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,qBAAqB,CAAC,IAAa;QACvC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QAE1B,wFAAwF;QACxF,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAE/C,6EAA6E;QAC7E,MAAM,GAAG,GAAG,CAAC,CAAc,EAAE,IAAY,EAAU,EAAE;YACnD,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;YAClF,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEzC,mFAAmF;QACnF,wFAAwF;QACxF,MAAM,GAAG,GACP,qBAAqB,QAAQ,WAAW;YACxC,QAAQ,SAAS,KAAK;YACtB,cAAc,OAAO,aAAa,QAAQ,QAAQ,MAAM,GAAG;YAC3D,cAAc,OAAO,aAAa,QAAQ,SAAS,QAAQ,GAAG;YAC9D,YAAY,UAAU,eAAe,QAAQ,MAAM,CAAC;QAEtD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAA4B,CAAC;QAC5F,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,YAAY,CAAC,IAAa;QAC9B,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC7C,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAC1B,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;SACjC,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAChC,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,iBAAiB,CAAC,IAAa,EAAE,UAAkB;QACvD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"mikro-orm-authz.store.js","sourceRoot":"","sources":["../src/mikro-orm-authz.store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { type UserRef } from '@dudousxd/nestjs-authz/store-kit';
|
|
2
|
+
import type { ModuleRef } from '@nestjs/core';
|
|
3
|
+
/** A tenant as published by `@dudousxd/nestjs-context` (`Context.tenant()`). */
|
|
4
|
+
export interface TenantRef {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: string;
|
|
7
|
+
source: string;
|
|
8
|
+
slug?: string;
|
|
9
|
+
role?: string;
|
|
10
|
+
}
|
|
11
|
+
/** How the context says a lib must scope data right now (`Context.tenantFilter()`). */
|
|
12
|
+
export type TenantFilter = {
|
|
13
|
+
mode: 'system';
|
|
14
|
+
} | {
|
|
15
|
+
mode: 'all';
|
|
16
|
+
} | {
|
|
17
|
+
mode: 'tenantless';
|
|
18
|
+
} | {
|
|
19
|
+
mode: 'tenant';
|
|
20
|
+
tenant: TenantRef;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* The RBAC module's `tenancy` option. `'inherit'` (default) follows `ContextModule`'s
|
|
24
|
+
* `tenancy.enabled`; `false` keeps this module out of tenancy.
|
|
25
|
+
*/
|
|
26
|
+
export type AuthzTenancyOption = 'inherit' | false | {
|
|
27
|
+
/** `'inherit'` (default) follows the context switch; a boolean overrides it. */
|
|
28
|
+
enabled?: 'inherit' | boolean;
|
|
29
|
+
/** Tenant kinds this module honours, instead of the context's `kinds`. */
|
|
30
|
+
kinds?: string[];
|
|
31
|
+
/**
|
|
32
|
+
* Accepted for the shared shape. It changes nothing here: a GLOBAL role assignment
|
|
33
|
+
* always applies, in every tenant.
|
|
34
|
+
*/
|
|
35
|
+
nullRows?: 'tenantless' | 'shared';
|
|
36
|
+
/**
|
|
37
|
+
* Map the caller's role inside the context tenant (`tenant.role`) to authz roles that
|
|
38
|
+
* apply in that tenant's scope only, e.g. `{ owner: 'org_admin', member: 'org_member' }`.
|
|
39
|
+
* Unmapped roles grant nothing.
|
|
40
|
+
*/
|
|
41
|
+
roles?: Record<string, string | readonly string[]>;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* An explicit tenant for a check, from the user being checked. Return a tenant id to scope the
|
|
45
|
+
* check to it, `null` for the global scope, or `undefined` to fall back to the context.
|
|
46
|
+
*/
|
|
47
|
+
export type TenantResolver = (user: unknown) => string | null | undefined;
|
|
48
|
+
/** The structural slice of nestjs-context's accessor this module reads. */
|
|
49
|
+
export interface TenantContextAccessor {
|
|
50
|
+
tenantId?(): string | undefined;
|
|
51
|
+
userRef?(): {
|
|
52
|
+
type?: string;
|
|
53
|
+
id: string | number;
|
|
54
|
+
} | undefined;
|
|
55
|
+
tenancy?(): {
|
|
56
|
+
enabled: boolean;
|
|
57
|
+
kinds?: string[];
|
|
58
|
+
};
|
|
59
|
+
tenantFilter?(options?: {
|
|
60
|
+
kinds?: string[];
|
|
61
|
+
}): TenantFilter;
|
|
62
|
+
}
|
|
63
|
+
/** The tenant scope of one check, plus the roles `tenancy.roles` adds in that scope. */
|
|
64
|
+
export interface RbacTenant {
|
|
65
|
+
scope: {
|
|
66
|
+
tenantId?: string;
|
|
67
|
+
};
|
|
68
|
+
roles: string[];
|
|
69
|
+
}
|
|
70
|
+
export interface ResolveRbacTenantInput {
|
|
71
|
+
/** The user as the Gate passed it. */
|
|
72
|
+
user: unknown;
|
|
73
|
+
/** The same user mapped to a store ref. */
|
|
74
|
+
ref: UserRef;
|
|
75
|
+
/** The module's explicit `tenant` resolver, if any. */
|
|
76
|
+
resolver?: TenantResolver | undefined;
|
|
77
|
+
/** The module's `tenancy` option. */
|
|
78
|
+
tenancy?: AuthzTenancyOption | undefined;
|
|
79
|
+
/** The context accessor found through DI, if any (else the global slot is read). */
|
|
80
|
+
accessor?: TenantContextAccessor | undefined;
|
|
81
|
+
/** With tenancy off, scope by the context's plain `tenantId()` (drizzle/typeorm behaviour). */
|
|
82
|
+
legacyContextTenant: boolean;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Precedence: the explicit `tenant` resolver, then (tenancy on) the context tenant filter, then
|
|
86
|
+
* (tenancy off) the adapter's behaviour without tenancy. `tenant` mode scopes to that tenant;
|
|
87
|
+
* `tenantless`, `all` and `system` use the global scope.
|
|
88
|
+
*/
|
|
89
|
+
export declare function resolveRbacTenant(input: ResolveRbacTenantInput): RbacTenant;
|
|
90
|
+
/** A provider's per-instance cache for {@link rbacTenant}'s accessor lookup. */
|
|
91
|
+
export interface TenantContextCache {
|
|
92
|
+
resolved: boolean;
|
|
93
|
+
value: TenantContextAccessor | undefined;
|
|
94
|
+
}
|
|
95
|
+
/** The tenant scope (and `tenancy.roles` roles) of one check for `user`. */
|
|
96
|
+
export declare function rbacTenant(options: {
|
|
97
|
+
tenant?: TenantResolver | undefined;
|
|
98
|
+
tenancy?: AuthzTenancyOption | undefined;
|
|
99
|
+
}, user: unknown, ref: UserRef, injected: TenantContextAccessor | undefined, moduleRef: ModuleRef | undefined, cache: TenantContextCache, legacyContextTenant: boolean): RbacTenant;
|
|
100
|
+
//# sourceMappingURL=tenancy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenancy.d.ts","sourceRoot":"","sources":["../src/tenancy.ts"],"names":[],"mappings":"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"}
|
package/dist/tenancy.js
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Tenancy for the RBAC module: which tenant scope a permission/role check runs in, and which
|
|
2
|
+
// roles the caller's role inside the context tenant maps to. The same file ships in every
|
|
3
|
+
// store adapter. It reads the @dudousxd/nestjs-context tenancy contract STRUCTURALLY (no import),
|
|
4
|
+
// so it works with any context version, and with none: a missing or older context reads as
|
|
5
|
+
// tenancy off.
|
|
6
|
+
import { CONTEXT_ACCESSOR } from '@dudousxd/nestjs-authz';
|
|
7
|
+
import { normalizeUserRef } from '@dudousxd/nestjs-authz/store-kit';
|
|
8
|
+
const SLOT = Symbol.for('@dudousxd/nestjs-diagnostics:accessor');
|
|
9
|
+
/** Is tenancy on for this module? Call per check: the context can change between requests. */
|
|
10
|
+
function readTenancy(option, a) {
|
|
11
|
+
if (option === false)
|
|
12
|
+
return { enabled: false };
|
|
13
|
+
if (typeof a?.tenancy !== 'function' || typeof a.tenantFilter !== 'function') {
|
|
14
|
+
return { enabled: false };
|
|
15
|
+
}
|
|
16
|
+
const own = typeof option === 'object' ? option : {};
|
|
17
|
+
const inherit = own.enabled === undefined || own.enabled === 'inherit';
|
|
18
|
+
if (!(inherit ? a.tenancy().enabled : own.enabled))
|
|
19
|
+
return { enabled: false };
|
|
20
|
+
const kinds = own.kinds;
|
|
21
|
+
const tenantFilter = a.tenantFilter.bind(a);
|
|
22
|
+
return { enabled: true, filter: () => tenantFilter(kinds ? { kinds } : undefined) };
|
|
23
|
+
}
|
|
24
|
+
/** The accessor found through DI, else the global slot `ContextModule` publishes. */
|
|
25
|
+
function effectiveAccessor(injected) {
|
|
26
|
+
if (injected)
|
|
27
|
+
return injected;
|
|
28
|
+
const slot = globalThis[SLOT];
|
|
29
|
+
const current = slot?.current;
|
|
30
|
+
return current && typeof current === 'object' ? current : undefined;
|
|
31
|
+
}
|
|
32
|
+
/** Today's behaviour without tenancy: the context's plain `tenantId()`, read defensively. */
|
|
33
|
+
function legacyTenantId(accessor) {
|
|
34
|
+
if (!accessor || typeof accessor.tenantId !== 'function')
|
|
35
|
+
return undefined;
|
|
36
|
+
try {
|
|
37
|
+
return accessor.tenantId() ?? undefined;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Is `ref` the context's current user? Tenant roles belong to the caller, nobody else. */
|
|
44
|
+
function isContextUser(ref, accessor) {
|
|
45
|
+
let current;
|
|
46
|
+
try {
|
|
47
|
+
current = accessor?.userRef?.();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
current = undefined;
|
|
51
|
+
}
|
|
52
|
+
if (!current || current.id === undefined || current.id === null)
|
|
53
|
+
return false;
|
|
54
|
+
const a = normalizeUserRef(ref);
|
|
55
|
+
const b = normalizeUserRef(current);
|
|
56
|
+
return a.type === b.type && a.id === b.id;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Precedence: the explicit `tenant` resolver, then (tenancy on) the context tenant filter, then
|
|
60
|
+
* (tenancy off) the adapter's behaviour without tenancy. `tenant` mode scopes to that tenant;
|
|
61
|
+
* `tenantless`, `all` and `system` use the global scope.
|
|
62
|
+
*/
|
|
63
|
+
export function resolveRbacTenant(input) {
|
|
64
|
+
const explicit = input.resolver ? input.resolver(input.user) : undefined;
|
|
65
|
+
const accessor = effectiveAccessor(input.accessor);
|
|
66
|
+
const tenancy = readTenancy(input.tenancy, accessor);
|
|
67
|
+
const filter = tenancy.enabled ? tenancy.filter() : undefined;
|
|
68
|
+
let scope;
|
|
69
|
+
if (explicit !== undefined) {
|
|
70
|
+
scope = explicit === null ? {} : { tenantId: explicit };
|
|
71
|
+
}
|
|
72
|
+
else if (filter) {
|
|
73
|
+
scope = filter.mode === 'tenant' ? { tenantId: filter.tenant.id } : {};
|
|
74
|
+
}
|
|
75
|
+
else if (input.legacyContextTenant) {
|
|
76
|
+
const id = legacyTenantId(input.accessor);
|
|
77
|
+
scope = id === undefined ? {} : { tenantId: id };
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
scope = {};
|
|
81
|
+
}
|
|
82
|
+
const map = typeof input.tenancy === 'object' ? input.tenancy.roles : undefined;
|
|
83
|
+
let roles = [];
|
|
84
|
+
if (map &&
|
|
85
|
+
filter?.mode === 'tenant' &&
|
|
86
|
+
filter.tenant.role !== undefined &&
|
|
87
|
+
scope.tenantId === filter.tenant.id &&
|
|
88
|
+
Object.prototype.hasOwnProperty.call(map, filter.tenant.role) &&
|
|
89
|
+
isContextUser(input.ref, accessor)) {
|
|
90
|
+
const mapped = map[filter.tenant.role];
|
|
91
|
+
roles = typeof mapped === 'string' ? [mapped] : [...(mapped ?? [])];
|
|
92
|
+
}
|
|
93
|
+
return { scope, roles };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Locate the context accessor. Prefers a value injected into the module; falls back to a
|
|
97
|
+
* non-strict {@link ModuleRef} lookup so an accessor provided by ANY module (the app root, a
|
|
98
|
+
* global ContextModule) is still found: the RBAC module is global and its providers don't import
|
|
99
|
+
* the app's modules, so a plain `@Inject` would miss a root-provided accessor.
|
|
100
|
+
*/
|
|
101
|
+
function resolveTenantContext(injected, moduleRef, cache) {
|
|
102
|
+
if (injected)
|
|
103
|
+
return injected;
|
|
104
|
+
if (cache.resolved)
|
|
105
|
+
return cache.value;
|
|
106
|
+
cache.resolved = true;
|
|
107
|
+
if (moduleRef) {
|
|
108
|
+
try {
|
|
109
|
+
cache.value = moduleRef.get(CONTEXT_ACCESSOR, { strict: false });
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
cache.value = undefined;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return cache.value;
|
|
116
|
+
}
|
|
117
|
+
/** The tenant scope (and `tenancy.roles` roles) of one check for `user`. */
|
|
118
|
+
export function rbacTenant(options, user, ref, injected, moduleRef, cache, legacyContextTenant) {
|
|
119
|
+
return resolveRbacTenant({
|
|
120
|
+
user,
|
|
121
|
+
ref,
|
|
122
|
+
resolver: options.tenant,
|
|
123
|
+
tenancy: options.tenancy,
|
|
124
|
+
accessor: resolveTenantContext(injected, moduleRef, cache),
|
|
125
|
+
legacyContextTenant,
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=tenancy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenancy.js","sourceRoot":"","sources":["../src/tenancy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dudousxd/nestjs-authz-mikro-orm",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "MikroORM RBAC persistence for @dudousxd/nestjs-authz — roles, permissions, and a Gate seam (zero connection ownership).",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|