@neohm/nestend 5.0.2 → 6.0.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.
Files changed (223) hide show
  1. package/README.md +34 -18
  2. package/dist/admin/controllers/admin.api.key.controller.d.ts +5 -0
  3. package/dist/admin/controllers/admin.api.key.controller.d.ts.map +1 -1
  4. package/dist/admin/controllers/admin.api.key.controller.js +22 -2
  5. package/dist/admin/controllers/admin.api.key.controller.js.map +1 -1
  6. package/dist/admin/controllers/admin.permission.controller.d.ts +17 -0
  7. package/dist/admin/controllers/admin.permission.controller.d.ts.map +1 -0
  8. package/dist/admin/controllers/admin.permission.controller.js +125 -0
  9. package/dist/admin/controllers/admin.permission.controller.js.map +1 -0
  10. package/dist/admin/controllers/admin.scope.controller.d.ts.map +1 -1
  11. package/dist/admin/controllers/admin.scope.controller.js +1 -1
  12. package/dist/admin/controllers/admin.scope.controller.js.map +1 -1
  13. package/dist/admin/controllers/system.role.controller.d.ts +17 -1
  14. package/dist/admin/controllers/system.role.controller.d.ts.map +1 -1
  15. package/dist/admin/controllers/system.role.controller.js +13 -4
  16. package/dist/admin/controllers/system.role.controller.js.map +1 -1
  17. package/dist/admin/dtos/add.api.key.dto.d.ts +1 -0
  18. package/dist/admin/dtos/add.api.key.dto.d.ts.map +1 -1
  19. package/dist/admin/dtos/add.api.key.dto.js +12 -0
  20. package/dist/admin/dtos/add.api.key.dto.js.map +1 -1
  21. package/dist/admin/dtos/add.permission.dto.d.ts +8 -0
  22. package/dist/admin/dtos/add.permission.dto.d.ts.map +1 -0
  23. package/dist/admin/dtos/add.permission.dto.js +53 -0
  24. package/dist/admin/dtos/add.permission.dto.js.map +1 -0
  25. package/dist/admin/dtos/add.system.role.dto.d.ts +3 -0
  26. package/dist/admin/dtos/add.system.role.dto.d.ts.map +1 -1
  27. package/dist/admin/dtos/add.system.role.dto.js +38 -1
  28. package/dist/admin/dtos/add.system.role.dto.js.map +1 -1
  29. package/dist/admin/dtos/api.key.roles.dto.d.ts +4 -0
  30. package/dist/admin/dtos/api.key.roles.dto.d.ts.map +1 -0
  31. package/dist/admin/dtos/api.key.roles.dto.js +30 -0
  32. package/dist/admin/dtos/api.key.roles.dto.js.map +1 -0
  33. package/dist/admin/dtos/permission.list.dto.d.ts +4 -0
  34. package/dist/admin/dtos/permission.list.dto.d.ts.map +1 -0
  35. package/dist/admin/dtos/permission.list.dto.js +8 -0
  36. package/dist/admin/dtos/permission.list.dto.js.map +1 -0
  37. package/dist/admin/es6.classes.d.ts +9 -4
  38. package/dist/admin/es6.classes.d.ts.map +1 -1
  39. package/dist/admin/es6.classes.js +14 -0
  40. package/dist/admin/es6.classes.js.map +1 -1
  41. package/dist/admin/libraries/api.key.data.processor.d.ts +1 -0
  42. package/dist/admin/libraries/api.key.data.processor.d.ts.map +1 -1
  43. package/dist/admin/libraries/api.key.data.processor.js +23 -1
  44. package/dist/admin/libraries/api.key.data.processor.js.map +1 -1
  45. package/dist/admin/libraries/api.key.list.processor.d.ts.map +1 -1
  46. package/dist/admin/libraries/api.key.list.processor.js +18 -1
  47. package/dist/admin/libraries/api.key.list.processor.js.map +1 -1
  48. package/dist/admin/libraries/api.key.roles.data.processor.d.ts +15 -0
  49. package/dist/admin/libraries/api.key.roles.data.processor.d.ts.map +1 -0
  50. package/dist/admin/libraries/api.key.roles.data.processor.js +49 -0
  51. package/dist/admin/libraries/api.key.roles.data.processor.js.map +1 -0
  52. package/dist/admin/libraries/client.membership.data.processor.d.ts.map +1 -1
  53. package/dist/admin/libraries/client.membership.data.processor.js +4 -1
  54. package/dist/admin/libraries/client.membership.data.processor.js.map +1 -1
  55. package/dist/admin/libraries/client.user.data.processor.d.ts.map +1 -1
  56. package/dist/admin/libraries/client.user.data.processor.js +5 -2
  57. package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
  58. package/dist/admin/libraries/permission.data.processor.d.ts +16 -0
  59. package/dist/admin/libraries/permission.data.processor.d.ts.map +1 -0
  60. package/dist/admin/libraries/permission.data.processor.js +68 -0
  61. package/dist/admin/libraries/permission.data.processor.js.map +1 -0
  62. package/dist/admin/libraries/permission.list.processor.d.ts +11 -0
  63. package/dist/admin/libraries/permission.list.processor.d.ts.map +1 -0
  64. package/dist/admin/libraries/permission.list.processor.js +42 -0
  65. package/dist/admin/libraries/permission.list.processor.js.map +1 -0
  66. package/dist/admin/libraries/role.list.processor.d.ts.map +1 -1
  67. package/dist/admin/libraries/role.list.processor.js +14 -1
  68. package/dist/admin/libraries/role.list.processor.js.map +1 -1
  69. package/dist/admin/libraries/system.role.data.processor.d.ts +4 -0
  70. package/dist/admin/libraries/system.role.data.processor.d.ts.map +1 -1
  71. package/dist/admin/libraries/system.role.data.processor.js +68 -5
  72. package/dist/admin/libraries/system.role.data.processor.js.map +1 -1
  73. package/dist/admin/utilities/api.key.role.policy.d.ts +4 -0
  74. package/dist/admin/utilities/api.key.role.policy.d.ts.map +1 -0
  75. package/dist/admin/utilities/api.key.role.policy.js +30 -0
  76. package/dist/admin/utilities/api.key.role.policy.js.map +1 -0
  77. package/dist/admin/utilities/scope.grants.d.ts.map +1 -1
  78. package/dist/admin/utilities/scope.grants.js +6 -1
  79. package/dist/admin/utilities/scope.grants.js.map +1 -1
  80. package/dist/admin/utilities/tenant.role.policy.d.ts +4 -5
  81. package/dist/admin/utilities/tenant.role.policy.d.ts.map +1 -1
  82. package/dist/admin/utilities/tenant.role.policy.js +7 -6
  83. package/dist/admin/utilities/tenant.role.policy.js.map +1 -1
  84. package/dist/auth/controllers/auth.controller.d.ts.map +1 -1
  85. package/dist/auth/controllers/auth.controller.js +5 -2
  86. package/dist/auth/controllers/auth.controller.js.map +1 -1
  87. package/dist/auth/controllers/tenant.invitation.controller.d.ts.map +1 -1
  88. package/dist/auth/controllers/tenant.invitation.controller.js +15 -16
  89. package/dist/auth/controllers/tenant.invitation.controller.js.map +1 -1
  90. package/dist/auth/controllers/tenant.member.controller.d.ts.map +1 -1
  91. package/dist/auth/controllers/tenant.member.controller.js +5 -5
  92. package/dist/auth/controllers/tenant.member.controller.js.map +1 -1
  93. package/dist/auth/decorators/api.key.scopes.decorator.d.ts +4 -0
  94. package/dist/auth/decorators/api.key.scopes.decorator.d.ts.map +1 -1
  95. package/dist/auth/decorators/api.key.scopes.decorator.js +7 -1
  96. package/dist/auth/decorators/api.key.scopes.decorator.js.map +1 -1
  97. package/dist/auth/entities/api.key.role.entity.d.ts +13 -0
  98. package/dist/auth/entities/api.key.role.entity.d.ts.map +1 -0
  99. package/dist/auth/entities/api.key.role.entity.js +51 -0
  100. package/dist/auth/entities/api.key.role.entity.js.map +1 -0
  101. package/dist/auth/entities/permission.entity.d.ts +10 -0
  102. package/dist/auth/entities/permission.entity.d.ts.map +1 -0
  103. package/dist/auth/entities/permission.entity.js +43 -0
  104. package/dist/auth/entities/permission.entity.js.map +1 -0
  105. package/dist/auth/entities/role.permission.entity.d.ts +10 -0
  106. package/dist/auth/entities/role.permission.entity.d.ts.map +1 -0
  107. package/dist/auth/entities/role.permission.entity.js +41 -0
  108. package/dist/auth/entities/role.permission.entity.js.map +1 -0
  109. package/dist/auth/entities/system.role.entity.d.ts +6 -0
  110. package/dist/auth/entities/system.role.entity.d.ts.map +1 -1
  111. package/dist/auth/entities/system.role.entity.js +20 -0
  112. package/dist/auth/entities/system.role.entity.js.map +1 -1
  113. package/dist/auth/enums/role.default.enum.d.ts +8 -0
  114. package/dist/auth/enums/role.default.enum.d.ts.map +1 -0
  115. package/dist/auth/enums/role.default.enum.js +13 -0
  116. package/dist/auth/enums/role.default.enum.js.map +1 -0
  117. package/dist/auth/enums/tenant.role.enum.d.ts.map +1 -1
  118. package/dist/auth/enums/tenant.role.enum.js.map +1 -1
  119. package/dist/auth/guards/api.key.guard.d.ts.map +1 -1
  120. package/dist/auth/guards/api.key.guard.js +24 -8
  121. package/dist/auth/guards/api.key.guard.js.map +1 -1
  122. package/dist/auth/middlewares/api.key.middleware.d.ts.map +1 -1
  123. package/dist/auth/middlewares/api.key.middleware.js +1 -1
  124. package/dist/auth/middlewares/api.key.middleware.js.map +1 -1
  125. package/dist/auth/processors/tenant.invitation.data.processor.d.ts +3 -1
  126. package/dist/auth/processors/tenant.invitation.data.processor.d.ts.map +1 -1
  127. package/dist/auth/processors/tenant.invitation.data.processor.js +6 -2
  128. package/dist/auth/processors/tenant.invitation.data.processor.js.map +1 -1
  129. package/dist/auth/processors/tenant.invitation.list.processor.d.ts +2 -1
  130. package/dist/auth/processors/tenant.invitation.list.processor.d.ts.map +1 -1
  131. package/dist/auth/processors/tenant.invitation.list.processor.js +4 -1
  132. package/dist/auth/processors/tenant.invitation.list.processor.js.map +1 -1
  133. package/dist/auth/services/api.key.service.d.ts +10 -2
  134. package/dist/auth/services/api.key.service.d.ts.map +1 -1
  135. package/dist/auth/services/api.key.service.js +84 -7
  136. package/dist/auth/services/api.key.service.js.map +1 -1
  137. package/dist/auth/services/auth.service.d.ts +10 -5
  138. package/dist/auth/services/auth.service.d.ts.map +1 -1
  139. package/dist/auth/services/auth.service.js +63 -49
  140. package/dist/auth/services/auth.service.js.map +1 -1
  141. package/dist/auth/services/role.service.d.ts +3 -1
  142. package/dist/auth/services/role.service.d.ts.map +1 -1
  143. package/dist/auth/services/role.service.js +37 -0
  144. package/dist/auth/services/role.service.js.map +1 -1
  145. package/dist/auth/services/scope.service.d.ts +1 -0
  146. package/dist/auth/services/scope.service.d.ts.map +1 -1
  147. package/dist/auth/services/scope.service.js +32 -0
  148. package/dist/auth/services/scope.service.js.map +1 -1
  149. package/dist/auth/services/tenant.invitation.service.d.ts +6 -4
  150. package/dist/auth/services/tenant.invitation.service.d.ts.map +1 -1
  151. package/dist/auth/services/tenant.invitation.service.js +30 -6
  152. package/dist/auth/services/tenant.invitation.service.js.map +1 -1
  153. package/dist/auth/services/tenant.membership.service.d.ts +3 -1
  154. package/dist/auth/services/tenant.membership.service.d.ts.map +1 -1
  155. package/dist/auth/services/tenant.membership.service.js +22 -3
  156. package/dist/auth/services/tenant.membership.service.js.map +1 -1
  157. package/dist/auth/types/api.key.types.d.ts +6 -0
  158. package/dist/auth/types/api.key.types.d.ts.map +1 -1
  159. package/dist/auth/types/auth.types.d.ts +2 -0
  160. package/dist/auth/types/auth.types.d.ts.map +1 -1
  161. package/dist/auth/types/rbac.types.d.ts +35 -0
  162. package/dist/auth/types/rbac.types.d.ts.map +1 -0
  163. package/dist/auth/types/rbac.types.js +3 -0
  164. package/dist/auth/types/rbac.types.js.map +1 -0
  165. package/dist/auth/utilities/grant.authority.d.ts +14 -0
  166. package/dist/auth/utilities/grant.authority.d.ts.map +1 -0
  167. package/dist/auth/utilities/grant.authority.js +38 -0
  168. package/dist/auth/utilities/grant.authority.js.map +1 -0
  169. package/dist/auth/utilities/role.catalogue.d.ts +10 -0
  170. package/dist/auth/utilities/role.catalogue.d.ts.map +1 -0
  171. package/dist/auth/utilities/role.catalogue.js +81 -0
  172. package/dist/auth/utilities/role.catalogue.js.map +1 -0
  173. package/dist/auth/utilities/role.hierarchy.d.ts +31 -0
  174. package/dist/auth/utilities/role.hierarchy.d.ts.map +1 -0
  175. package/dist/auth/utilities/role.hierarchy.js +149 -0
  176. package/dist/auth/utilities/role.hierarchy.js.map +1 -0
  177. package/dist/auth/utilities/scope.cascade.d.ts +2 -0
  178. package/dist/auth/utilities/scope.cascade.d.ts.map +1 -1
  179. package/dist/auth/utilities/scope.cascade.js +44 -2
  180. package/dist/auth/utilities/scope.cascade.js.map +1 -1
  181. package/dist/auth/utilities/tenant.access.d.ts.map +1 -1
  182. package/dist/auth/utilities/tenant.access.js +10 -3
  183. package/dist/auth/utilities/tenant.access.js.map +1 -1
  184. package/dist/constants/entity.constants.d.ts +3 -0
  185. package/dist/constants/entity.constants.d.ts.map +1 -1
  186. package/dist/constants/entity.constants.js +3 -0
  187. package/dist/constants/entity.constants.js.map +1 -1
  188. package/dist/constants/entity.maps.d.ts +6 -0
  189. package/dist/constants/entity.maps.d.ts.map +1 -1
  190. package/dist/constants/entity.maps.js +6 -0
  191. package/dist/constants/entity.maps.js.map +1 -1
  192. package/dist/index.d.ts +9 -4
  193. package/dist/index.d.ts.map +1 -1
  194. package/dist/index.js +20 -9
  195. package/dist/index.js.map +1 -1
  196. package/dist/migrations/1749600000004.CreateSysRolesTable.d.ts.map +1 -1
  197. package/dist/migrations/1749600000004.CreateSysRolesTable.js +7 -0
  198. package/dist/migrations/1749600000004.CreateSysRolesTable.js.map +1 -1
  199. package/dist/migrations/1749600000025.CreateSysScopesTable.d.ts +3 -0
  200. package/dist/migrations/1749600000025.CreateSysScopesTable.d.ts.map +1 -1
  201. package/dist/migrations/1749600000025.CreateSysScopesTable.js +16 -0
  202. package/dist/migrations/1749600000025.CreateSysScopesTable.js.map +1 -1
  203. package/dist/migrations/1749600000033.CreateSysPermissionsTable.d.ts +6 -0
  204. package/dist/migrations/1749600000033.CreateSysPermissionsTable.d.ts.map +1 -0
  205. package/dist/migrations/1749600000033.CreateSysPermissionsTable.js +29 -0
  206. package/dist/migrations/1749600000033.CreateSysPermissionsTable.js.map +1 -0
  207. package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.d.ts +6 -0
  208. package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.d.ts.map +1 -0
  209. package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.js +32 -0
  210. package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.js.map +1 -0
  211. package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.d.ts +6 -0
  212. package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.d.ts.map +1 -0
  213. package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.js +38 -0
  214. package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.js.map +1 -0
  215. package/dist/migrations/1749600000036.SeedGlobalAdminRole.d.ts +6 -0
  216. package/dist/migrations/1749600000036.SeedGlobalAdminRole.d.ts.map +1 -0
  217. package/dist/migrations/1749600000036.SeedGlobalAdminRole.js +25 -0
  218. package/dist/migrations/1749600000036.SeedGlobalAdminRole.js.map +1 -0
  219. package/package.json +1 -1
  220. package/dist/auth/enums/role.tier.enum.d.ts +0 -6
  221. package/dist/auth/enums/role.tier.enum.d.ts.map +0 -1
  222. package/dist/auth/enums/role.tier.enum.js +0 -10
  223. package/dist/auth/enums/role.tier.enum.js.map +0 -1
package/README.md CHANGED
@@ -104,9 +104,9 @@ these are free to change without a breaking release.
104
104
  | Migrations | `MigrationUtility`, `SeederUtility` (the 31 table migrations ship in `dist/migrations` — glob them, they are not barrel exports) | fluent `this.string()`, `this.numeric()`, `addRecord()` seeding |
105
105
  | Queue | `QueueModule`, `QueueModule.withConnection()`, `QueueService`, `CommonJob` | BullMQ `@Processor`/`WorkerHost` consumer; auto-discovered jobs, duplicate prevention, recurring schedulers, completed jobs cleared from Redis on success (1-day TTL on failures), `clearQueue()`, retries, failures persisted to `sys_failed_jobs`; connection from `BULL_REDIS_*` or supplied by the app — never register `BullModule.forRoot()` yourself, two roots race over the worker's connection |
106
106
  | Scheduled events | `SystemScheduledTaskEntity`, `ScheduledEventEntity`, `ScheduleKind`, `ScheduleSpec`, `IsCronExpression` | schedule definitions in `sys_scheduled_tasks` → events in `sys_scheduled_events`; interval / cron / once specs with timezones, drift-free slots, horizon materialisation, catch-up + overlap policies, fire-once dispatch with backoff, cadence via `SCHEDULED_EVENT_MIN` |
107
- | Auth | `AuthModule`, `AuthService.validateRole()`, `RoleTier`, `TenantRole`, `Auth`, `JwtMiddleware` | imperative auth (open by default); `<module>.<tier>` role hierarchy (manager > writer > viewer), with `global.admin` overriding every role check; JwtMiddleware resolves the user into `Auth`'s AsyncLocalStorage context per request; access + rotating refresh tokens; session-based logout invalidation (`sys_auth_sessions`); Google SSO via ID token at `POST /auth/google`; impersonation — a tenantless `has_global_access` user signs into one organization at `POST /auth/impersonation/login`; multi-organization membership with per-organization roles, organization switching and `global.admin` invitations (`TenantMembershipService`, `TenantInvitationService`) |
107
+ | Auth | `AuthModule`, `AuthService.validateRole()`/`validatePermission()`, `RoleHierarchy`, `TenantRole`, `Auth`, `JwtMiddleware` | imperative auth (open by default); scoped RBAC — roles ranked by priority within a scope (parent scopes cover children), permissions per role, scope admins granting their scope's roles, with `global.admin` overriding every check; JwtMiddleware resolves the user into `Auth`'s AsyncLocalStorage context per request; access + rotating refresh tokens; session-based logout invalidation (`sys_auth_sessions`); Google SSO via ID token at `POST /auth/google`; impersonation — a tenantless `has_global_access` user signs into one organization at `POST /auth/impersonation/login`; multi-organization membership with per-organization roles, organization switching and invitations by `global.admin` or scope admins (`TenantMembershipService`, `TenantInvitationService`) |
108
108
  | Admin auth | `AdminAuthService.validateRole()`, `AdminAuth`, `AdminJwtMiddleware` (endpoints at `/admin/auth`) | fully separate stack for back-office admins — own users table (`sys_admin_users`), own roles (`sys_admin_roles`/`sys_auser_roles`), own sessions/refresh tokens (shared tables, `is_admin` flag) |
109
- | API keys | `ApiKeyService`, `ApiKeyGuard` / `ApiKeyMiddleware`, `@ApiKeyScopes()`, `ApiKeyContext` | hashed keys in `sys_api_keys` (admin-owned), one tenant per key, expiry/revocation, `x-api-key` header; `validateAccess(scope)` returns the tenant the key acts for |
109
+ | API keys | `ApiKeyService`, `ApiKeyGuard` / `ApiKeyMiddleware`, `@ApiKeyScopes()`/`@ApiKeyRoles()`/`@ApiKeyPermissions()`, `ApiKeyContext` | hashed keys in `sys_api_keys` (admin-owned), one tenant per key, roles inside its scopes, expiry/revocation, `x-api-key` header; `validateAccess(scope, role?)`/`validatePermission()` return the tenant the key acts for |
110
110
  | Scopes | `ScopeService`, `AuthService.validateAccess()`, `ScopeEntity`, `TenantScopeEntity`, `ApiScopeEntity` | one feature named once in `sys_scopes`, optionally with child scopes under it, then granted per organization (`sys_tenant_scopes`) or per API key (`sys_api_scopes`) — never an array on the principal |
111
111
  | Multi-tenancy | `TenantModule`, `TenantEntity`, `CommonTenantEntity`, `TenantContextService`, `TenantContextMiddleware` | AsyncLocalStorage tenant context bound from the authenticated session (or API key), never a client-supplied header; tenants are onboarded by admins (`TenantEntity.creator` → `AdminUserEntity`) |
112
112
  | Admin | `AdminModule` (its controllers, DTOs and processors are internal — import the module and hit the endpoints), `GlobalAdminRoles` | back-office APIs: tenant onboarding, client/admin/system user registration (single + bulk), the `has_global_access` grant that enables impersonation, tenant + scheduled-task listing, the email/PDF template catalogues (read at content-reader, written at content-manager, deleted at global admin); 4-tier `GlobalAdminRoles` gate over `sys_admin_roles`; Swagger at `/docs` (hidden in production) |
@@ -183,20 +183,25 @@ active session. Pass a role identifier to gate on a specific role:
183
183
  `validateRole('invoice.viewer')`. This keeps authorization next to your business
184
184
  logic, so layering tenant/plan/role checks is just more code.
185
185
 
186
- Role checks understand seniority. Identifiers named `<module>.<tier>` — where the
187
- tier is one of `RoleTier`: **manager** > **writer** > **viewer** — are satisfied by
188
- any equal or more senior tier of the same module, so gating a read endpoint at
189
- `invoice.viewer` also admits `invoice.writer` and `invoice.manager` without
190
- listing them. The module half must match exactly (`payroll.manager` never clears
191
- `invoice.viewer`), and an identifier that isn't tiered — `tenant.editor`, or a
192
- bare `manager` — still matches by exact string, so roles outside the convention
193
- behave as before. Rank comes from the declaration order of `RoleTier`, the same
194
- derivation `AdminAccessService` uses for `GlobalAdminRoles`; adding a tier is an
195
- enum edit. Nothing changes in the schema — a `sys_roles` row named to the
196
- convention gets the hierarchy for free. Above all of it sits `global.admin`
197
- (`TenantRole.GLOBAL_ADMIN`): a user granted that role clears every
198
- `validateRole()` check, whatever module or tier it asks for — a scope check on
199
- `validateAccess()` still applies.
186
+ Tenant authorization is scoped RBAC (full design: `docs/architecture/13-rbac.md`).
187
+ A role in `sys_roles` belongs to a scope (`scope_id` → `sys_scopes`) and ranks
188
+ within it by `priority` — 1 is the most senior. A role covers every role of its
189
+ scope with an equal or larger priority, and the roles of its child scopes the
190
+ same way: `inventory.admin (1)` clears `validateRole('inventory.reader')`, and
191
+ `billing.reader (3)` clears `billing.invoicing.reader (3)`. Seniority never
192
+ crosses unrelated scopes, and ranks are data the back office edits, not
193
+ identifier conventions. Roles bundle permissions (`sys_permissions`, each in one
194
+ scope); `validatePermission('inventory.item.read')` passes when a held role, or a
195
+ role it outranks, carries it. Roles and permissions of a scope the tenant no
196
+ longer holds grant nothing. Above all of it sits `global.admin`
197
+ (`TenantRole.GLOBAL_ADMIN`): it clears every role and permission check — a scope
198
+ check on `validateAccess()` still applies.
199
+
200
+ Granting is delegated by scope. The top role of a scope (its smallest priority)
201
+ makes its holder a scope admin, who may invite with, grant and revoke that
202
+ scope's roles (and its child scopes') — nothing else. `global.admin` grants
203
+ anything, and alone deactivates or removes members. `GET /auth/me` returns the
204
+ caller's effective `permissions` and `grantable_scopes`.
200
205
 
201
206
  For a feature that a whole organization is either enabled for or not, use
202
207
  `validateAccess(scopeIdentifier, roleIdentifier?)`: it first checks that the
@@ -701,8 +706,19 @@ const { tenant } = this.apiKeyService.validateAccess('orders:read');
701
706
  // tenant is the sys_tenants row the key acts for — never taken from the payload
702
707
  ```
703
708
 
704
- `ApiKeyGuard`/`@ApiKeyScopes()` remain available for guard-based enforcement;
705
- `hasScope()` is `async` now that grants are rows.
709
+ A key can also hold roles inside its scopes (`sys_api_key_roles`, set at issue
710
+ with `role_ids` or through `POST /api/admin/api-keys/:id/roles`). The same
711
+ hierarchy applies, so a key's roles cover the roles they outrank and reach their
712
+ permissions:
713
+
714
+ ```ts
715
+ this.apiKeyService.validateAccess('inventory', 'inventory.reader');
716
+ this.apiKeyService.validatePermission('inventory.item.read');
717
+ ```
718
+
719
+ `ApiKeyGuard` with `@ApiKeyScopes()`, `@ApiKeyRoles()` and `@ApiKeyPermissions()`
720
+ remains available for guard-based enforcement; `hasScope()` is `async` now that
721
+ grants are rows.
706
722
 
707
723
  ### Email Notifications (AWS SES)
708
724
 
@@ -5,6 +5,7 @@ import { AdminAccessService } from '../services/admin.access.service';
5
5
  import { CacheService } from '../../common/services/cache.service';
6
6
  import { AddApiKeyDto } from '../dtos/add.api.key.dto';
7
7
  import { ApiKeyListDto } from '../dtos/api.key.list.dto';
8
+ import { ApiKeyRolesDto } from '../dtos/api.key.roles.dto';
8
9
  export declare class AdminApiKeyController {
9
10
  private readonly adminAccessService;
10
11
  private readonly apiKeyService;
@@ -17,6 +18,10 @@ export declare class AdminApiKeyController {
17
18
  issue(dto: AddApiKeyDto): Promise<import("../types/admin.types").IssuedApiKey>;
18
19
  list(dto: ApiKeyListDto): Promise<import("../..").CommonListResult>;
19
20
  detail(id: string): Promise<import("../..").ApiKeyDetail>;
21
+ setRoles(id: string, dto: ApiKeyRolesDto): Promise<{
22
+ id: string;
23
+ role_ids: string[];
24
+ }>;
20
25
  reveal(id: string): Promise<{
21
26
  id: string;
22
27
  key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"admin.api.key.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.api.key.controller.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAQnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAOzD,qBAIa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAJZ,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY;IAI7C,MAAM,CAAC,QAAQ,CAAC,YAAY,MAAM;IAClC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,QAAQ;IAQnC,KAAK,CAAS,GAAG,EAAE,YAAY;IAe/B,IAAI,CAAS,GAAG,EAAE,aAAa;IAW/B,MAAM,CAA6B,EAAE,EAAE,MAAM;IAY7C,MAAM,CAA6B,EAAE,EAAE,MAAM;;;;IA0B7C,OAAO,CAA6B,EAAE,EAAE,MAAM;IAa9C,MAAM,CAA6B,EAAE,EAAE,MAAM;IAOnD,OAAO,CAAC,KAAK;CAQd"}
1
+ {"version":3,"file":"admin.api.key.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.api.key.controller.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAQnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAS3D,qBAIa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAJZ,kBAAkB,EAAE,kBAAkB,EACtC,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY;IAI7C,MAAM,CAAC,QAAQ,CAAC,YAAY,MAAM;IAClC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,QAAQ;IAQnC,KAAK,CAAS,GAAG,EAAE,YAAY;IAe/B,IAAI,CAAS,GAAG,EAAE,aAAa;IAW/B,MAAM,CAA6B,EAAE,EAAE,MAAM;IAY7C,QAAQ,CACgB,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,cAAc;;;;IAiBvB,MAAM,CAA6B,EAAE,EAAE,MAAM;;;;IA0B7C,OAAO,CAA6B,EAAE,EAAE,MAAM;IAa9C,MAAM,CAA6B,EAAE,EAAE,MAAM;IAOnD,OAAO,CAAC,KAAK;CAQd"}
@@ -31,6 +31,8 @@ const api_key_data_processor_1 = require("../libraries/api.key.data.processor");
31
31
  const api_key_list_processor_1 = require("../libraries/api.key.list.processor");
32
32
  const add_api_key_dto_1 = require("../dtos/add.api.key.dto");
33
33
  const api_key_list_dto_1 = require("../dtos/api.key.list.dto");
34
+ const api_key_roles_dto_1 = require("../dtos/api.key.roles.dto");
35
+ const api_key_roles_data_processor_1 = require("../libraries/api.key.roles.data.processor");
34
36
  let AdminApiKeyController = AdminApiKeyController_1 = class AdminApiKeyController {
35
37
  constructor(adminAccessService, apiKeyService, scopeService, listFilterService, cacheService) {
36
38
  this.adminAccessService = adminAccessService;
@@ -51,6 +53,11 @@ let AdminApiKeyController = AdminApiKeyController_1 = class AdminApiKeyControlle
51
53
  await this.adminAccessService.validateContentReader();
52
54
  return this.apiKeyService.apiKeyDetail(id);
53
55
  }
56
+ async setRoles(id, dto) {
57
+ const { user } = await this.adminAccessService.validateAdmin();
58
+ const roleIds = await new api_key_roles_data_processor_1.ApiKeyRolesDataProcessor(user, this.apiKeyService).process(id, dto);
59
+ return { id, role_ids: roleIds };
60
+ }
54
61
  async reveal(id) {
55
62
  const { user } = await this.adminAccessService.validateSuperAdmin();
56
63
  const count = await this.cacheService.increment(`admin:api-key-reveal:${user.id}`, AdminApiKeyController_1.REVEAL_WINDOW_SEC);
@@ -93,7 +100,7 @@ __decorate([
93
100
  (0, common_1.Post)(),
94
101
  (0, swagger_1.ApiOperation)({
95
102
  summary: 'Issue an API key for a tenant.',
96
- description: 'Create-only — `raw_key` is the full key and is returned exactly once. Keys are stored hash-only unless API_KEY_REVEAL_ENABLED is on. `expires_at` defaults to 365 days and may be at most 730 days ahead. The tenant (or user) must be active. A key can only be granted scopes its tenant already holds, which includes the children of any parent scope the tenant is enabled for. Requires at least the global admin role.',
103
+ description: 'Create-only — `raw_key` is the full key and is returned exactly once. Keys are stored hash-only unless API_KEY_REVEAL_ENABLED is on. `expires_at` defaults to 365 days and may be at most 730 days ahead. The tenant (or user) must be active. A key can only be granted scopes its tenant already holds, which includes the children of any parent scope the tenant is enabled for, and `role_ids` inside those scopes. Requires at least the global admin role.',
97
104
  }),
98
105
  __param(0, (0, common_1.Body)()),
99
106
  __metadata("design:type", Function),
@@ -115,13 +122,26 @@ __decorate([
115
122
  (0, common_1.Get)(':id'),
116
123
  (0, swagger_1.ApiOperation)({
117
124
  summary: 'One API key, without its secret.',
118
- description: 'Carries the owner and the `scopes` granted to the key. The raw key is never part of this response; see `POST :id/reveal`. Requires at least the global content reader role.',
125
+ description: 'Carries the owner and the `scopes` and `roles` granted to the key. The raw key is never part of this response; see `POST :id/reveal`. Requires at least the global content reader role.',
119
126
  }),
120
127
  __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
121
128
  __metadata("design:type", Function),
122
129
  __metadata("design:paramtypes", [String]),
123
130
  __metadata("design:returntype", Promise)
124
131
  ], AdminApiKeyController.prototype, "detail", null);
132
+ __decorate([
133
+ (0, common_1.Post)(':id/roles'),
134
+ (0, common_1.HttpCode)(200),
135
+ (0, swagger_1.ApiOperation)({
136
+ summary: "Replace an API key's roles.",
137
+ description: "`role_ids` is the complete set. Each must be an active scoped role inside a scope the key effectively holds (its grants, children included, ∩ its tenant's scopes). The key then satisfies those roles, the roles they outrank, and their permissions — see `@ApiKeyRoles`/`@ApiKeyPermissions`. Requires at least the global admin role.",
138
+ }),
139
+ __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
140
+ __param(1, (0, common_1.Body)()),
141
+ __metadata("design:type", Function),
142
+ __metadata("design:paramtypes", [String, api_key_roles_dto_1.ApiKeyRolesDto]),
143
+ __metadata("design:returntype", Promise)
144
+ ], AdminApiKeyController.prototype, "setRoles", null);
125
145
  __decorate([
126
146
  (0, common_1.Post)(':id/reveal'),
127
147
  (0, common_1.HttpCode)(200),
@@ -1 +1 @@
1
- {"version":3,"file":"admin.api.key.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.api.key.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin.api.key.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.api.key.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { ListFilterService } from '../../common/services/list.filter.service';
2
+ import { PermissionEntity } from '../../auth/entities/permission.entity';
3
+ import { RoleService } from '../../auth/services/role.service';
4
+ import { AdminAccessService } from '../services/admin.access.service';
5
+ import { AddPermissionDto } from '../dtos/add.permission.dto';
6
+ import { PermissionListDto } from '../dtos/permission.list.dto';
7
+ export declare class AdminPermissionController {
8
+ private readonly adminAccessService;
9
+ private readonly roleService;
10
+ private readonly listFilterService;
11
+ constructor(adminAccessService: AdminAccessService, roleService: RoleService, listFilterService: ListFilterService);
12
+ save(dto: AddPermissionDto): Promise<PermissionEntity>;
13
+ list(dto: PermissionListDto): Promise<import("../..").CommonListResult>;
14
+ detail(id: string): Promise<PermissionEntity>;
15
+ remove(id: string): Promise<import("../..").DeleteResult>;
16
+ }
17
+ //# sourceMappingURL=admin.permission.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.permission.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.permission.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAK9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAItE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAQhE,qBAIa,yBAAyB;IAElC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB;IASjD,IAAI,CAAS,GAAG,EAAE,gBAAgB;IAWlC,IAAI,CAAS,GAAG,EAAE,iBAAiB;IAUnC,MAAM,CAA6B,EAAE,EAAE,MAAM;IAiB7C,MAAM,CAA6B,EAAE,EAAE,MAAM;CAgBpD"}
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AdminPermissionController = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const swagger_1 = require("@nestjs/swagger");
18
+ const list_filter_service_1 = require("../../common/services/list.filter.service");
19
+ const strict_validation_pipe_1 = require("../../common/pipes/strict.validation.pipe");
20
+ const not_found_exception_1 = require("../../global/exceptions/not.found.exception");
21
+ const audit_action_enum_1 = require("../../common/enums/audit.action.enum");
22
+ const entity_constants_1 = require("../../constants/entity.constants");
23
+ const permission_entity_1 = require("../../auth/entities/permission.entity");
24
+ const role_service_1 = require("../../auth/services/role.service");
25
+ const admin_access_service_1 = require("../services/admin.access.service");
26
+ const admin_audit_1 = require("../utilities/admin.audit");
27
+ const permission_data_processor_1 = require("../libraries/permission.data.processor");
28
+ const permission_list_processor_1 = require("../libraries/permission.list.processor");
29
+ const add_permission_dto_1 = require("../dtos/add.permission.dto");
30
+ const permission_list_dto_1 = require("../dtos/permission.list.dto");
31
+ let AdminPermissionController = class AdminPermissionController {
32
+ constructor(adminAccessService, roleService, listFilterService) {
33
+ this.adminAccessService = adminAccessService;
34
+ this.roleService = roleService;
35
+ this.listFilterService = listFilterService;
36
+ }
37
+ async save(dto) {
38
+ const access = await this.adminAccessService.validateAdmin();
39
+ return new permission_data_processor_1.PermissionDataProcessor(access).process(dto);
40
+ }
41
+ async list(dto) {
42
+ await this.adminAccessService.validateContentReader();
43
+ return new permission_list_processor_1.PermissionListProcessor(this.listFilterService).process(dto);
44
+ }
45
+ async detail(id) {
46
+ await this.adminAccessService.validateContentReader();
47
+ const permission = await permission_entity_1.PermissionEntity.findOne({
48
+ where: { id },
49
+ relations: { scope: true },
50
+ });
51
+ if (!permission)
52
+ throw new not_found_exception_1.NotFoundException('No permission exists for this id');
53
+ return permission;
54
+ }
55
+ async remove(id) {
56
+ const { user } = await this.adminAccessService.validateSuperAdmin();
57
+ const permission = await permission_entity_1.PermissionEntity.findOne({ where: { id } });
58
+ if (!permission)
59
+ throw new not_found_exception_1.NotFoundException('No permission exists for this id');
60
+ const result = await this.roleService.deletePermission(id, user.id);
61
+ await admin_audit_1.AdminAudit.record(permission_entity_1.PermissionEntity.getRepository().manager, {
62
+ actor: user,
63
+ sourceType: entity_constants_1.baseEntityConstants.permission,
64
+ sourceId: id,
65
+ action: audit_action_enum_1.AuditAction.SOFT_DELETE,
66
+ oldValue: admin_audit_1.AdminAudit.pick(permission, ['identifier', 'name', 'scope_id']),
67
+ });
68
+ return result;
69
+ }
70
+ };
71
+ exports.AdminPermissionController = AdminPermissionController;
72
+ __decorate([
73
+ (0, common_1.Post)(),
74
+ (0, swagger_1.ApiOperation)({
75
+ summary: 'Define a permission, or update an existing one.',
76
+ description: 'Send an `id` to edit; omit it to define one. `identifier` (unique) and `scope_id` are fixed once created. Requires at least the global admin role.',
77
+ }),
78
+ __param(0, (0, common_1.Body)()),
79
+ __metadata("design:type", Function),
80
+ __metadata("design:paramtypes", [add_permission_dto_1.AddPermissionDto]),
81
+ __metadata("design:returntype", Promise)
82
+ ], AdminPermissionController.prototype, "save", null);
83
+ __decorate([
84
+ (0, common_1.Post)('list'),
85
+ (0, swagger_1.ApiOperation)({
86
+ summary: 'List, search and filter permissions.',
87
+ description: 'Rows carry `scope_identifier` and `scope_name`. Requires at least the global content reader role.',
88
+ }),
89
+ __param(0, (0, common_1.Body)()),
90
+ __metadata("design:type", Function),
91
+ __metadata("design:paramtypes", [permission_list_dto_1.PermissionListDto]),
92
+ __metadata("design:returntype", Promise)
93
+ ], AdminPermissionController.prototype, "list", null);
94
+ __decorate([
95
+ (0, common_1.Get)(':id'),
96
+ (0, swagger_1.ApiOperation)({
97
+ summary: 'One permission, in full.',
98
+ description: 'Requires at least the global content reader role.',
99
+ }),
100
+ __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
101
+ __metadata("design:type", Function),
102
+ __metadata("design:paramtypes", [String]),
103
+ __metadata("design:returntype", Promise)
104
+ ], AdminPermissionController.prototype, "detail", null);
105
+ __decorate([
106
+ (0, common_1.Delete)(':id'),
107
+ (0, swagger_1.ApiOperation)({
108
+ summary: 'Delete a permission.',
109
+ description: 'Soft delete; every role loses it. Requires the global super admin role.',
110
+ }),
111
+ __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
112
+ __metadata("design:type", Function),
113
+ __metadata("design:paramtypes", [String]),
114
+ __metadata("design:returntype", Promise)
115
+ ], AdminPermissionController.prototype, "remove", null);
116
+ exports.AdminPermissionController = AdminPermissionController = __decorate([
117
+ (0, swagger_1.ApiTags)('Admin - Permissions'),
118
+ (0, swagger_1.ApiBearerAuth)(),
119
+ (0, common_1.UsePipes)(strict_validation_pipe_1.StrictValidationPipe),
120
+ (0, common_1.Controller)('api/admin/permissions'),
121
+ __metadata("design:paramtypes", [admin_access_service_1.AdminAccessService,
122
+ role_service_1.RoleService,
123
+ list_filter_service_1.ListFilterService])
124
+ ], AdminPermissionController);
125
+ //# sourceMappingURL=admin.permission.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.permission.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.permission.controller.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"admin.scope.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.scope.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAQtE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQ/D,qBAIa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB;IASjD,IAAI,CAAS,GAAG,EAAE,WAAW;IAW7B,IAAI,CAAS,GAAG,EAAE,YAAY;IAW9B,SAAS,CAA6B,EAAE,EAAE,MAAM,EAAU,GAAG,EAAE,WAAW;IAW1E,QAAQ,CAA6B,EAAE,EAAE,MAAM,EAAU,GAAG,EAAE,YAAY;IAa1E,MAAM,CAA6B,EAAE,EAAE,MAAM;IAe7C,MAAM,CAA6B,EAAE,EAAE,MAAM;CA6BpD"}
1
+ {"version":3,"file":"admin.scope.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/admin.scope.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAQtE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAGjE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAQ/D,qBAIa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,iBAAiB;IASjD,IAAI,CAAS,GAAG,EAAE,WAAW;IAW7B,IAAI,CAAS,GAAG,EAAE,YAAY;IAW9B,SAAS,CACe,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,WAAW;IAYpB,QAAQ,CACgB,EAAE,EAAE,MAAM,EAC9B,GAAG,EAAE,YAAY;IAcrB,MAAM,CAA6B,EAAE,EAAE,MAAM;IAe7C,MAAM,CAA6B,EAAE,EAAE,MAAM;CA6BpD"}
@@ -145,7 +145,7 @@ __decorate([
145
145
  (0, common_1.Delete)(':id'),
146
146
  (0, swagger_1.ApiOperation)({
147
147
  summary: 'Delete a scope.',
148
- description: 'Soft delete. Its children go with it, and so does every grant of any of them (principal grants and API-key grants), so no principal keeps a feature the catalogue no longer defines. Requires at least the global admin role, and the global super admin role when the scope has children or live grants.',
148
+ description: 'Soft delete. Its children go with it, and so does every grant of any of them (principal grants and API-key grants), along with the roles and permissions defined in them and every grant of those roles, so no principal keeps a feature the catalogue no longer defines. Requires at least the global admin role, and the global super admin role when the scope has children or live grants.',
149
149
  }),
150
150
  __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
151
151
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"admin.scope.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.scope.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CASwB;AACxB,6CAAuE;AACvE,mFAA8E;AAC9E,2EAAsE;AACtE,sFAAiF;AACjF,qFAAgF;AAChF,4EAAmE;AACnE,uEAAuE;AACvE,0DAAsD;AACtD,4DAAwD;AACxD,4DAAwD;AACxD,qEAAiE;AACjE,4EAAuE;AACvE,4EAAuE;AACvE,yDAAoD;AACpD,2DAAsD;AACtD,mEAA+D;AAYxD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YACmB,kBAAsC,EACtC,YAA0B,EAC1B,iBAAoC;QAFpC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAQE,AAAN,KAAK,CAAC,IAAI,CAAS,GAAgB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACtE,OAAO,IAAI,yCAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAQK,AAAN,KAAK,CAAC,IAAI,CAAS,GAAiB;QAClC,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QACtD,OAAO,IAAI,yCAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAQK,AAAN,KAAK,CAAC,SAAS,CAA6B,EAAU,EAAU,GAAgB;QAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACtE,OAAO,IAAI,yCAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAQK,AAAN,KAAK,CAAC,QAAQ,CAA6B,EAAU,EAAU,GAAiB;QAC9E,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QACtD,OAAO,IAAI,yCAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;YAC5D,GAAG,GAAG;YACN,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;IACL,CAAC;IAOK,AAAN,KAAK,CAAC,MAAM,CAA6B,EAAU;QACjD,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,0BAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,uCAAiB,CAAC,6BAA6B,CAAC,CAAC;QAEvE,OAAO,KAAK,CAAC;IACf,CAAC;IAQK,AAAN,KAAK,CAAC,MAAM,CAA6B,EAAU;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;QAE7D,MAAM,KAAK,GAAG,MAAM,0BAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,uCAAiB,CAAC,6BAA6B,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,0BAAW,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC;QACpD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,0BAAW,CAAC,YAAY,CAC7D,OAAO,EACP,EAAE,CACH,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,0BAAW,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,yCAAkB,CAAC,WAAW,CAC5B,MAAM,EACN,0BAAW,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,EACnD,mDAAmD,CACpD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,MAAM,wBAAU,CAAC,MAAM,CAAC,OAAO,EAAE;YAC/B,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,UAAU,EAAE,sCAAmB,CAAC,KAAK;YACrC,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,+BAAW,CAAC,WAAW;YAC/B,QAAQ,EAAE,wBAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACrE,OAAO,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;SACnE,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AAvGY,oDAAoB;AAazB;IANL,IAAA,aAAI,GAAE;IACN,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,4CAA4C;QACrD,WAAW,EACT,8SAA8S;KACjT,CAAC;IACU,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,2BAAW;;gDAGlC;AAQK;IANL,IAAA,aAAI,EAAC,MAAM,CAAC;IACZ,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,iCAAiC;QAC1C,WAAW,EACT,sNAAsN;KACzN,CAAC;IACU,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,6BAAY;;gDAGnC;AAQK;IANL,IAAA,aAAI,EAAC,cAAc,CAAC;IACpB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,gEAAgE;QACzE,WAAW,EACT,6VAA6V;KAChW,CAAC;IACe,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,2BAAW;;qDAG/E;AAQK;IANL,IAAA,aAAI,EAAC,mBAAmB,CAAC;IACzB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,oDAAoD;QAC7D,WAAW,EACT,qLAAqL;KACxL,CAAC;IACc,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;IAAc,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,6BAAY;;oDAM/E;AAOK;IALL,IAAA,YAAG,EAAC,KAAK,CAAC;IACV,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,mDAAmD;KACjE,CAAC;IACY,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;;;;kDAOvC;AAQK;IANL,IAAA,eAAM,EAAC,KAAK,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EACT,2SAA2S;KAC9S,CAAC;IACY,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;;;;kDA4BvC;+BAtGU,oBAAoB;IAJhC,IAAA,iBAAO,EAAC,gBAAgB,CAAC;IACzB,IAAA,uBAAa,GAAE;IACf,IAAA,iBAAQ,EAAC,6CAAoB,CAAC;IAC9B,IAAA,mBAAU,EAAC,kBAAkB,CAAC;qCAGU,yCAAkB;QACxB,4BAAY;QACP,uCAAiB;GAJ5C,oBAAoB,CAuGhC"}
1
+ {"version":3,"file":"admin.scope.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.scope.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CASwB;AACxB,6CAAuE;AACvE,mFAA8E;AAC9E,2EAAsE;AACtE,sFAAiF;AACjF,qFAAgF;AAChF,4EAAmE;AACnE,uEAAuE;AACvE,0DAAsD;AACtD,4DAAwD;AACxD,4DAAwD;AACxD,qEAAiE;AACjE,4EAAuE;AACvE,4EAAuE;AACvE,yDAAoD;AACpD,2DAAsD;AACtD,mEAA+D;AAYxD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YACmB,kBAAsC,EACtC,YAA0B,EAC1B,iBAAoC;QAFpC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAQE,AAAN,KAAK,CAAC,IAAI,CAAS,GAAgB;QACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACtE,OAAO,IAAI,yCAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAQK,AAAN,KAAK,CAAC,IAAI,CAAS,GAAiB;QAClC,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QACtD,OAAO,IAAI,yCAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;IAQK,AAAN,KAAK,CAAC,SAAS,CACe,EAAU,EAC9B,GAAgB;QAExB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;QACtE,OAAO,IAAI,yCAAkB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAQK,AAAN,KAAK,CAAC,QAAQ,CACgB,EAAU,EAC9B,GAAiB;QAEzB,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QACtD,OAAO,IAAI,yCAAkB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC;YAC5D,GAAG,GAAG;YACN,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;IACL,CAAC;IAOK,AAAN,KAAK,CAAC,MAAM,CAA6B,EAAU;QACjD,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QAEtD,MAAM,KAAK,GAAG,MAAM,0BAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,uCAAiB,CAAC,6BAA6B,CAAC,CAAC;QAEvE,OAAO,KAAK,CAAC;IACf,CAAC;IAQK,AAAN,KAAK,CAAC,MAAM,CAA6B,EAAU;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;QAE7D,MAAM,KAAK,GAAG,MAAM,0BAAW,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,uCAAiB,CAAC,6BAA6B,CAAC,CAAC;QAEvE,MAAM,OAAO,GAAG,0BAAW,CAAC,aAAa,EAAE,CAAC,OAAO,CAAC;QACpD,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,0BAAW,CAAC,YAAY,CAC7D,OAAO,EACP,EAAE,CACH,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,0BAAW,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9D,yCAAkB,CAAC,WAAW,CAC5B,MAAM,EACN,0BAAW,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,EACnD,mDAAmD,CACpD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvE,MAAM,wBAAU,CAAC,MAAM,CAAC,OAAO,EAAE;YAC/B,KAAK,EAAE,MAAM,CAAC,IAAI;YAClB,UAAU,EAAE,sCAAmB,CAAC,KAAK;YACrC,QAAQ,EAAE,EAAE;YACZ,MAAM,EAAE,+BAAW,CAAC,WAAW;YAC/B,QAAQ,EAAE,wBAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACrE,OAAO,EAAE,EAAE,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE;SACnE,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAA;AA7GY,oDAAoB;AAazB;IANL,IAAA,aAAI,GAAE;IACN,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,4CAA4C;QACrD,WAAW,EACT,8SAA8S;KACjT,CAAC;IACU,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,2BAAW;;gDAGlC;AAQK;IANL,IAAA,aAAI,EAAC,MAAM,CAAC;IACZ,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,iCAAiC;QAC1C,WAAW,EACT,sNAAsN;KACzN,CAAC;IACU,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAM,6BAAY;;gDAGnC;AAQK;IANL,IAAA,aAAI,EAAC,cAAc,CAAC;IACpB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,gEAAgE;QACzE,WAAW,EACT,6VAA6V;KAChW,CAAC;IAEC,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,2BAAW;;qDAIzB;AAQK;IANL,IAAA,aAAI,EAAC,mBAAmB,CAAC;IACzB,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,oDAAoD;QAC7D,WAAW,EACT,qLAAqL;KACxL,CAAC;IAEC,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;IAC1B,WAAA,IAAA,aAAI,GAAE,CAAA;;6CAAM,6BAAY;;oDAO1B;AAOK;IALL,IAAA,YAAG,EAAC,KAAK,CAAC;IACV,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,mDAAmD;KACjE,CAAC;IACY,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;;;;kDAOvC;AAQK;IANL,IAAA,eAAM,EAAC,KAAK,CAAC;IACb,IAAA,sBAAY,EAAC;QACZ,OAAO,EAAE,iBAAiB;QAC1B,WAAW,EACT,gYAAgY;KACnY,CAAC;IACY,WAAA,IAAA,cAAK,EAAC,IAAI,EAAE,sBAAa,CAAC,CAAA;;;;kDA4BvC;+BA5GU,oBAAoB;IAJhC,IAAA,iBAAO,EAAC,gBAAgB,CAAC;IACzB,IAAA,uBAAa,GAAE;IACf,IAAA,iBAAQ,EAAC,6CAAoB,CAAC;IAC9B,IAAA,mBAAU,EAAC,kBAAkB,CAAC;qCAGU,yCAAkB;QACxB,4BAAY;QACP,uCAAiB;GAJ5C,oBAAoB,CA6GhC"}
@@ -11,7 +11,23 @@ export declare class SystemRoleController {
11
11
  constructor(adminAccessService: AdminAccessService, roleService: RoleService, listFilterService: ListFilterService);
12
12
  save(dto: AddSystemRoleDto): Promise<SystemRoleEntity>;
13
13
  list(dto: RoleListDto): Promise<import("../..").CommonListResult>;
14
- detail(id: string): Promise<SystemRoleEntity>;
14
+ detail(id: string): Promise<{
15
+ permissions: import("../..").PermissionEntity[];
16
+ is_active: boolean;
17
+ identifier: string;
18
+ name: string;
19
+ description: string;
20
+ attributes: Record<string, any>;
21
+ scope_id: string;
22
+ priority: number;
23
+ userRoles: import("../..").UserRoleEntity[];
24
+ scope: import("../..").ScopeEntity;
25
+ sn: number;
26
+ id: string;
27
+ created_at: Date;
28
+ updated_at: Date;
29
+ deleted_at: Date;
30
+ }>;
15
31
  remove(id: string): Promise<import("../..").DeleteResult>;
16
32
  }
17
33
  //# sourceMappingURL=system.role.controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"system.role.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/system.role.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAQtE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAc1E,qBAIa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB;IASjD,IAAI,CAAS,GAAG,EAAE,gBAAgB;IAUlC,IAAI,CAAS,GAAG,EAAE,WAAW;IAU7B,MAAM,CAA6B,EAAE,EAAE,MAAM;IAe7C,MAAM,CAA6B,EAAE,EAAE,MAAM;CAkBpD"}
1
+ {"version":3,"file":"system.role.controller.d.ts","sourceRoot":"","sources":["../../../src/admin/controllers/system.role.controller.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAQtE,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAc1E,qBAIa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,kBAAkB,EAAE,kBAAkB,EACtC,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB;IASjD,IAAI,CAAS,GAAG,EAAE,gBAAgB;IAUlC,IAAI,CAAS,GAAG,EAAE,WAAW;IAW7B,MAAM,CAA6B,EAAE,EAAE,MAAM;;;;;;;;;;;;;;;;;IAwB7C,MAAM,CAA6B,EAAE,EAAE,MAAM;CAkBpD"}
@@ -46,10 +46,19 @@ let SystemRoleController = class SystemRoleController {
46
46
  }
47
47
  async detail(id) {
48
48
  await this.adminAccessService.validateContentReader();
49
- const role = await system_role_entity_1.SystemRoleEntity.findOne({ where: { id } });
49
+ const role = await system_role_entity_1.SystemRoleEntity.findOne({
50
+ where: { id },
51
+ relations: { scope: true, rolePermissions: { permission: true } },
52
+ });
50
53
  if (!role)
51
54
  throw new not_found_exception_1.NotFoundException('No role exists for this id');
52
- return role;
55
+ const { rolePermissions, ...rest } = role;
56
+ return {
57
+ ...rest,
58
+ permissions: (rolePermissions ?? [])
59
+ .map((grant) => grant.permission)
60
+ .filter((permission) => !!permission),
61
+ };
53
62
  }
54
63
  async remove(id) {
55
64
  const { user } = await this.adminAccessService.validateSuperAdmin();
@@ -74,7 +83,7 @@ __decorate([
74
83
  (0, common_1.Post)(),
75
84
  (0, swagger_1.ApiOperation)({
76
85
  summary: 'Define a role, or update an existing one.',
77
- description: 'Send an `id` to edit that role; omit it to define a new one. `identifier` is unique, fixed once created, and may not be a reserved identifier. Omitted optional fields keep their stored value. Requires at least the global admin role, and the global super admin role to change `is_active` of an existing role.',
86
+ description: "Send an `id` to edit that role; omit it to define a new one. `identifier` is unique and fixed once created (`global.admin` is seeded by a migration); `scope_id` is fixed once created. `priority` ranks the role within its scope (1 = most senior) and `permission_ids` replaces the permissions it carries itself. Omitted optional fields keep their stored value. Requires at least the global admin role, and the global super admin role to change `is_active` or `priority` of an existing role or to create one above its scope's top role.",
78
87
  }),
79
88
  __param(0, (0, common_1.Body)()),
80
89
  __metadata("design:type", Function),
@@ -96,7 +105,7 @@ __decorate([
96
105
  (0, common_1.Get)(':id'),
97
106
  (0, swagger_1.ApiOperation)({
98
107
  summary: 'One role, in full.',
99
- description: 'Requires at least the global content reader role.',
108
+ description: 'Carries its `scope` and the `permissions` it holds itself (seniority adds those of the roles it outranks). Requires at least the global content reader role.',
100
109
  }),
101
110
  __param(0, (0, common_1.Param)('id', common_1.ParseUUIDPipe)),
102
111
  __metadata("design:type", Function),
@@ -1 +1 @@
1
- {"version":3,"file":"system.role.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/system.role.controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"system.role.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/system.role.controller.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ export declare class AddApiKeyDto {
2
2
  name: string;
3
3
  tenant_id: string;
4
4
  scope_ids?: string[];
5
+ role_ids?: string[];
5
6
  expires_at?: string;
6
7
  }
7
8
  //# sourceMappingURL=add.api.key.dto.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"add.api.key.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.api.key.dto.ts"],"names":[],"mappings":"AAgBA,qBAAa,YAAY;IAKvB,IAAI,EAAE,MAAM,CAAC;IAQb,SAAS,EAAE,MAAM,CAAC;IAalB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IASrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
1
+ {"version":3,"file":"add.api.key.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.api.key.dto.ts"],"names":[],"mappings":"AAgBA,qBAAa,YAAY;IAKvB,IAAI,EAAE,MAAM,CAAC;IAQb,SAAS,EAAE,MAAM,CAAC;IAalB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAYrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IASpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -46,6 +46,18 @@ __decorate([
46
46
  (0, class_validator_1.IsUUID)('all', { each: true }),
47
47
  __metadata("design:type", Array)
48
48
  ], AddApiKeyDto.prototype, "scope_ids", void 0);
49
+ __decorate([
50
+ (0, swagger_1.ApiPropertyOptional)({
51
+ type: [String],
52
+ format: 'uuid',
53
+ description: 'sys_roles uuids the key acts with. Each must be an active scoped role inside one of `scope_ids` (or a child of one).',
54
+ }),
55
+ (0, class_validator_1.IsOptional)(),
56
+ (0, class_validator_1.IsArray)(),
57
+ (0, class_validator_1.ArrayMaxSize)(admin_default_enum_1.AdminLimit.MAX_ID_ARRAY),
58
+ (0, class_validator_1.IsUUID)('all', { each: true }),
59
+ __metadata("design:type", Array)
60
+ ], AddApiKeyDto.prototype, "role_ids", void 0);
49
61
  __decorate([
50
62
  (0, swagger_1.ApiPropertyOptional)({
51
63
  description: `When the key stops working (ISO 8601). Must be in the future and at most ${admin_default_enum_1.AdminLimit.API_KEY_MAX_TTL_DAYS} days ahead; defaults to ${admin_default_enum_1.AdminLimit.API_KEY_DEFAULT_TTL_DAYS} days.`,
@@ -1 +1 @@
1
- {"version":3,"file":"add.api.key.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.api.key.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAUyB;AACzB,6CAAmE;AACnE,oEAAyD;AACzD,qEAA8D;AAG9D,MAAa,YAAY;CAoCxB;AApCD,oCAoCC;AA/BC;IAJC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACvC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;;0CACF;AAQb;IANC,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,wCAAwC;KACtD,CAAC;IACD,IAAA,wBAAM,GAAE;IACR,IAAA,4BAAU,GAAE;;+CACK;AAalB;IAXC,IAAA,6BAAmB,EAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EACT,yEAAyE;KAC5E,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;IACT,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,8BAAY,EAAC,+BAAU,CAAC,YAAY,CAAC;IACrC,IAAA,wBAAM,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;+CACT;AASrB;IAPC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,4EAA4E,+BAAU,CAAC,oBAAoB,4BAA4B,+BAAU,CAAC,wBAAwB,QAAQ;QAC/L,OAAO,EAAE,0BAA0B;KACpC,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,+BAAY,GAAE;;gDACK"}
1
+ {"version":3,"file":"add.api.key.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.api.key.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAUyB;AACzB,6CAAmE;AACnE,oEAAyD;AACzD,qEAA8D;AAG9D,MAAa,YAAY;CAgDxB;AAhDD,oCAgDC;AA3CC;IAJC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACvC,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;;0CACF;AAQb;IANC,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,wCAAwC;KACtD,CAAC;IACD,IAAA,wBAAM,GAAE;IACR,IAAA,4BAAU,GAAE;;+CACK;AAalB;IAXC,IAAA,6BAAmB,EAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EACT,yEAAyE;KAC5E,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;IACT,IAAA,8BAAY,EAAC,CAAC,CAAC;IACf,IAAA,8BAAY,EAAC,+BAAU,CAAC,YAAY,CAAC;IACrC,IAAA,wBAAM,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;+CACT;AAYrB;IAVC,IAAA,6BAAmB,EAAC;QACnB,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,MAAM,EAAE,MAAM;QACd,WAAW,EACT,sHAAsH;KACzH,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,yBAAO,GAAE;IACT,IAAA,8BAAY,EAAC,+BAAU,CAAC,YAAY,CAAC;IACrC,IAAA,wBAAM,EAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;8CACV;AASpB;IAPC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,4EAA4E,+BAAU,CAAC,oBAAoB,4BAA4B,+BAAU,CAAC,wBAAwB,QAAQ;QAC/L,OAAO,EAAE,0BAA0B;KACpC,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,+BAAY,GAAE;;gDACK"}
@@ -0,0 +1,8 @@
1
+ import { CommonDataDto } from '../../common/dtos/common.data.dto';
2
+ export declare class AddPermissionDto extends CommonDataDto {
3
+ scope_id: string;
4
+ identifier: string;
5
+ name: string;
6
+ description?: string;
7
+ }
8
+ //# sourceMappingURL=add.permission.dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.permission.dto.d.ts","sourceRoot":"","sources":["../../../src/admin/dtos/add.permission.dto.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAQlE,qBAAa,gBAAiB,SAAQ,aAAa;IAOjD,QAAQ,EAAE,MAAM,CAAC;IAUjB,UAAU,EAAE,MAAM,CAAC;IAMnB,IAAI,EAAE,MAAM,CAAC;IAMb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.AddPermissionDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const swagger_1 = require("@nestjs/swagger");
15
+ const common_data_dto_1 = require("../../common/dtos/common.data.dto");
16
+ const admin_patterns_1 = require("../validators/admin.patterns");
17
+ class AddPermissionDto extends common_data_dto_1.CommonDataDto {
18
+ }
19
+ exports.AddPermissionDto = AddPermissionDto;
20
+ __decorate([
21
+ (0, swagger_1.ApiProperty)({
22
+ format: 'uuid',
23
+ description: 'The scope this permission belongs to (sys_scopes).',
24
+ }),
25
+ (0, class_validator_1.IsUUID)(),
26
+ (0, class_validator_1.IsNotEmpty)(),
27
+ __metadata("design:type", String)
28
+ ], AddPermissionDto.prototype, "scope_id", void 0);
29
+ __decorate([
30
+ (0, swagger_1.ApiProperty)({ example: 'inventory.item.read' }),
31
+ (0, class_validator_1.IsString)(),
32
+ (0, class_validator_1.IsNotEmpty)(),
33
+ (0, class_validator_1.MaxLength)(150),
34
+ (0, class_validator_1.Matches)(admin_patterns_1.CATALOGUE_IDENTIFIER_PATTERN, {
35
+ message: 'identifier may only contain lowercase letters, digits, hyphens and underscores, joined by single dots or colons',
36
+ }),
37
+ __metadata("design:type", String)
38
+ ], AddPermissionDto.prototype, "identifier", void 0);
39
+ __decorate([
40
+ (0, swagger_1.ApiProperty)({ example: 'Read inventory items' }),
41
+ (0, class_validator_1.IsString)(),
42
+ (0, class_validator_1.IsNotEmpty)(),
43
+ (0, class_validator_1.MaxLength)(150),
44
+ __metadata("design:type", String)
45
+ ], AddPermissionDto.prototype, "name", void 0);
46
+ __decorate([
47
+ (0, swagger_1.ApiPropertyOptional)(),
48
+ (0, class_validator_1.IsOptional)(),
49
+ (0, class_validator_1.IsString)(),
50
+ (0, class_validator_1.MaxLength)(1000),
51
+ __metadata("design:type", String)
52
+ ], AddPermissionDto.prototype, "description", void 0);
53
+ //# sourceMappingURL=add.permission.dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.permission.dto.js","sourceRoot":"","sources":["../../../src/admin/dtos/add.permission.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qDAOyB;AACzB,6CAAmE;AACnE,uEAAkE;AAClE,iEAA4E;AAO5E,MAAa,gBAAiB,SAAQ,+BAAa;CA8BlD;AA9BD,4CA8BC;AAvBC;IANC,IAAA,qBAAW,EAAC;QACX,MAAM,EAAE,MAAM;QACd,WAAW,EAAE,oDAAoD;KAClE,CAAC;IACD,IAAA,wBAAM,GAAE;IACR,IAAA,4BAAU,GAAE;;kDACI;AAUjB;IARC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC;IAC/C,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;IACd,IAAA,yBAAO,EAAC,6CAA4B,EAAE;QACrC,OAAO,EACL,iHAAiH;KACpH,CAAC;;oDACiB;AAMnB;IAJC,IAAA,qBAAW,EAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAChD,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,EAAC,GAAG,CAAC;;8CACF;AAMb;IAJC,IAAA,6BAAmB,GAAE;IACrB,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;IACV,IAAA,2BAAS,EAAC,IAAI,CAAC;;qDACK"}