@neohm/nestend 5.0.2 → 6.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/README.md +36 -18
- package/dist/admin/controllers/admin.api.key.controller.d.ts +5 -0
- package/dist/admin/controllers/admin.api.key.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.api.key.controller.js +22 -2
- package/dist/admin/controllers/admin.api.key.controller.js.map +1 -1
- package/dist/admin/controllers/admin.permission.controller.d.ts +17 -0
- package/dist/admin/controllers/admin.permission.controller.d.ts.map +1 -0
- package/dist/admin/controllers/admin.permission.controller.js +125 -0
- package/dist/admin/controllers/admin.permission.controller.js.map +1 -0
- package/dist/admin/controllers/admin.scope.controller.d.ts.map +1 -1
- package/dist/admin/controllers/admin.scope.controller.js +1 -1
- package/dist/admin/controllers/admin.scope.controller.js.map +1 -1
- package/dist/admin/controllers/system.role.controller.d.ts +17 -1
- package/dist/admin/controllers/system.role.controller.d.ts.map +1 -1
- package/dist/admin/controllers/system.role.controller.js +13 -4
- package/dist/admin/controllers/system.role.controller.js.map +1 -1
- package/dist/admin/dtos/add.api.key.dto.d.ts +1 -0
- package/dist/admin/dtos/add.api.key.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.api.key.dto.js +12 -0
- package/dist/admin/dtos/add.api.key.dto.js.map +1 -1
- package/dist/admin/dtos/add.permission.dto.d.ts +8 -0
- package/dist/admin/dtos/add.permission.dto.d.ts.map +1 -0
- package/dist/admin/dtos/add.permission.dto.js +53 -0
- package/dist/admin/dtos/add.permission.dto.js.map +1 -0
- package/dist/admin/dtos/add.system.role.dto.d.ts +3 -0
- package/dist/admin/dtos/add.system.role.dto.d.ts.map +1 -1
- package/dist/admin/dtos/add.system.role.dto.js +38 -1
- package/dist/admin/dtos/add.system.role.dto.js.map +1 -1
- package/dist/admin/dtos/api.key.roles.dto.d.ts +4 -0
- package/dist/admin/dtos/api.key.roles.dto.d.ts.map +1 -0
- package/dist/admin/dtos/api.key.roles.dto.js +30 -0
- package/dist/admin/dtos/api.key.roles.dto.js.map +1 -0
- package/dist/admin/dtos/permission.list.dto.d.ts +4 -0
- package/dist/admin/dtos/permission.list.dto.d.ts.map +1 -0
- package/dist/admin/dtos/permission.list.dto.js +8 -0
- package/dist/admin/dtos/permission.list.dto.js.map +1 -0
- package/dist/admin/es6.classes.d.ts +9 -4
- package/dist/admin/es6.classes.d.ts.map +1 -1
- package/dist/admin/es6.classes.js +14 -0
- package/dist/admin/es6.classes.js.map +1 -1
- package/dist/admin/libraries/api.key.data.processor.d.ts +1 -0
- package/dist/admin/libraries/api.key.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/api.key.data.processor.js +23 -1
- package/dist/admin/libraries/api.key.data.processor.js.map +1 -1
- package/dist/admin/libraries/api.key.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/api.key.list.processor.js +18 -1
- package/dist/admin/libraries/api.key.list.processor.js.map +1 -1
- package/dist/admin/libraries/api.key.roles.data.processor.d.ts +15 -0
- package/dist/admin/libraries/api.key.roles.data.processor.d.ts.map +1 -0
- package/dist/admin/libraries/api.key.roles.data.processor.js +49 -0
- package/dist/admin/libraries/api.key.roles.data.processor.js.map +1 -0
- package/dist/admin/libraries/client.membership.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/client.membership.data.processor.js +4 -1
- package/dist/admin/libraries/client.membership.data.processor.js.map +1 -1
- package/dist/admin/libraries/client.user.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/client.user.data.processor.js +5 -2
- package/dist/admin/libraries/client.user.data.processor.js.map +1 -1
- package/dist/admin/libraries/permission.data.processor.d.ts +16 -0
- package/dist/admin/libraries/permission.data.processor.d.ts.map +1 -0
- package/dist/admin/libraries/permission.data.processor.js +68 -0
- package/dist/admin/libraries/permission.data.processor.js.map +1 -0
- package/dist/admin/libraries/permission.list.processor.d.ts +11 -0
- package/dist/admin/libraries/permission.list.processor.d.ts.map +1 -0
- package/dist/admin/libraries/permission.list.processor.js +42 -0
- package/dist/admin/libraries/permission.list.processor.js.map +1 -0
- package/dist/admin/libraries/role.list.processor.d.ts.map +1 -1
- package/dist/admin/libraries/role.list.processor.js +14 -1
- package/dist/admin/libraries/role.list.processor.js.map +1 -1
- package/dist/admin/libraries/system.role.data.processor.d.ts +4 -0
- package/dist/admin/libraries/system.role.data.processor.d.ts.map +1 -1
- package/dist/admin/libraries/system.role.data.processor.js +68 -5
- package/dist/admin/libraries/system.role.data.processor.js.map +1 -1
- package/dist/admin/utilities/api.key.role.policy.d.ts +4 -0
- package/dist/admin/utilities/api.key.role.policy.d.ts.map +1 -0
- package/dist/admin/utilities/api.key.role.policy.js +30 -0
- package/dist/admin/utilities/api.key.role.policy.js.map +1 -0
- package/dist/admin/utilities/scope.grants.d.ts.map +1 -1
- package/dist/admin/utilities/scope.grants.js +6 -1
- package/dist/admin/utilities/scope.grants.js.map +1 -1
- package/dist/admin/utilities/tenant.role.policy.d.ts +4 -5
- package/dist/admin/utilities/tenant.role.policy.d.ts.map +1 -1
- package/dist/admin/utilities/tenant.role.policy.js +7 -6
- package/dist/admin/utilities/tenant.role.policy.js.map +1 -1
- package/dist/auth/controllers/auth.controller.d.ts.map +1 -1
- package/dist/auth/controllers/auth.controller.js +5 -2
- package/dist/auth/controllers/auth.controller.js.map +1 -1
- package/dist/auth/controllers/tenant.invitation.controller.d.ts.map +1 -1
- package/dist/auth/controllers/tenant.invitation.controller.js +15 -16
- package/dist/auth/controllers/tenant.invitation.controller.js.map +1 -1
- package/dist/auth/controllers/tenant.member.controller.d.ts.map +1 -1
- package/dist/auth/controllers/tenant.member.controller.js +5 -5
- package/dist/auth/controllers/tenant.member.controller.js.map +1 -1
- package/dist/auth/decorators/api.key.scopes.decorator.d.ts +4 -0
- package/dist/auth/decorators/api.key.scopes.decorator.d.ts.map +1 -1
- package/dist/auth/decorators/api.key.scopes.decorator.js +7 -1
- package/dist/auth/decorators/api.key.scopes.decorator.js.map +1 -1
- package/dist/auth/entities/api.key.role.entity.d.ts +13 -0
- package/dist/auth/entities/api.key.role.entity.d.ts.map +1 -0
- package/dist/auth/entities/api.key.role.entity.js +51 -0
- package/dist/auth/entities/api.key.role.entity.js.map +1 -0
- package/dist/auth/entities/permission.entity.d.ts +10 -0
- package/dist/auth/entities/permission.entity.d.ts.map +1 -0
- package/dist/auth/entities/permission.entity.js +43 -0
- package/dist/auth/entities/permission.entity.js.map +1 -0
- package/dist/auth/entities/role.permission.entity.d.ts +10 -0
- package/dist/auth/entities/role.permission.entity.d.ts.map +1 -0
- package/dist/auth/entities/role.permission.entity.js +41 -0
- package/dist/auth/entities/role.permission.entity.js.map +1 -0
- package/dist/auth/entities/system.role.entity.d.ts +6 -0
- package/dist/auth/entities/system.role.entity.d.ts.map +1 -1
- package/dist/auth/entities/system.role.entity.js +20 -0
- package/dist/auth/entities/system.role.entity.js.map +1 -1
- package/dist/auth/enums/role.default.enum.d.ts +8 -0
- package/dist/auth/enums/role.default.enum.d.ts.map +1 -0
- package/dist/auth/enums/role.default.enum.js +13 -0
- package/dist/auth/enums/role.default.enum.js.map +1 -0
- package/dist/auth/enums/tenant.role.enum.d.ts.map +1 -1
- package/dist/auth/enums/tenant.role.enum.js.map +1 -1
- package/dist/auth/guards/api.key.guard.d.ts.map +1 -1
- package/dist/auth/guards/api.key.guard.js +24 -8
- package/dist/auth/guards/api.key.guard.js.map +1 -1
- package/dist/auth/middlewares/api.key.middleware.d.ts.map +1 -1
- package/dist/auth/middlewares/api.key.middleware.js +1 -1
- package/dist/auth/middlewares/api.key.middleware.js.map +1 -1
- package/dist/auth/processors/tenant.invitation.data.processor.d.ts +3 -1
- package/dist/auth/processors/tenant.invitation.data.processor.d.ts.map +1 -1
- package/dist/auth/processors/tenant.invitation.data.processor.js +6 -2
- package/dist/auth/processors/tenant.invitation.data.processor.js.map +1 -1
- package/dist/auth/processors/tenant.invitation.list.processor.d.ts +2 -1
- package/dist/auth/processors/tenant.invitation.list.processor.d.ts.map +1 -1
- package/dist/auth/processors/tenant.invitation.list.processor.js +4 -1
- package/dist/auth/processors/tenant.invitation.list.processor.js.map +1 -1
- package/dist/auth/services/api.key.service.d.ts +11 -2
- package/dist/auth/services/api.key.service.d.ts.map +1 -1
- package/dist/auth/services/api.key.service.js +90 -7
- package/dist/auth/services/api.key.service.js.map +1 -1
- package/dist/auth/services/auth.service.d.ts +10 -5
- package/dist/auth/services/auth.service.d.ts.map +1 -1
- package/dist/auth/services/auth.service.js +69 -49
- package/dist/auth/services/auth.service.js.map +1 -1
- package/dist/auth/services/role.service.d.ts +3 -1
- package/dist/auth/services/role.service.d.ts.map +1 -1
- package/dist/auth/services/role.service.js +37 -0
- package/dist/auth/services/role.service.js.map +1 -1
- package/dist/auth/services/scope.service.d.ts +1 -0
- package/dist/auth/services/scope.service.d.ts.map +1 -1
- package/dist/auth/services/scope.service.js +32 -0
- package/dist/auth/services/scope.service.js.map +1 -1
- package/dist/auth/services/tenant.invitation.service.d.ts +6 -4
- package/dist/auth/services/tenant.invitation.service.d.ts.map +1 -1
- package/dist/auth/services/tenant.invitation.service.js +30 -6
- package/dist/auth/services/tenant.invitation.service.js.map +1 -1
- package/dist/auth/services/tenant.membership.service.d.ts +3 -1
- package/dist/auth/services/tenant.membership.service.d.ts.map +1 -1
- package/dist/auth/services/tenant.membership.service.js +22 -3
- package/dist/auth/services/tenant.membership.service.js.map +1 -1
- package/dist/auth/types/api.key.types.d.ts +6 -0
- package/dist/auth/types/api.key.types.d.ts.map +1 -1
- package/dist/auth/types/auth.types.d.ts +2 -0
- package/dist/auth/types/auth.types.d.ts.map +1 -1
- package/dist/auth/types/rbac.types.d.ts +39 -0
- package/dist/auth/types/rbac.types.d.ts.map +1 -0
- package/dist/auth/types/rbac.types.js +3 -0
- package/dist/auth/types/rbac.types.js.map +1 -0
- package/dist/auth/utilities/grant.authority.d.ts +14 -0
- package/dist/auth/utilities/grant.authority.d.ts.map +1 -0
- package/dist/auth/utilities/grant.authority.js +38 -0
- package/dist/auth/utilities/grant.authority.js.map +1 -0
- package/dist/auth/utilities/role.catalogue.d.ts +10 -0
- package/dist/auth/utilities/role.catalogue.d.ts.map +1 -0
- package/dist/auth/utilities/role.catalogue.js +91 -0
- package/dist/auth/utilities/role.catalogue.js.map +1 -0
- package/dist/auth/utilities/role.hierarchy.d.ts +33 -0
- package/dist/auth/utilities/role.hierarchy.d.ts.map +1 -0
- package/dist/auth/utilities/role.hierarchy.js +158 -0
- package/dist/auth/utilities/role.hierarchy.js.map +1 -0
- package/dist/auth/utilities/scope.cascade.d.ts +2 -0
- package/dist/auth/utilities/scope.cascade.d.ts.map +1 -1
- package/dist/auth/utilities/scope.cascade.js +44 -2
- package/dist/auth/utilities/scope.cascade.js.map +1 -1
- package/dist/auth/utilities/tenant.access.d.ts.map +1 -1
- package/dist/auth/utilities/tenant.access.js +10 -3
- package/dist/auth/utilities/tenant.access.js.map +1 -1
- package/dist/constants/entity.constants.d.ts +3 -0
- package/dist/constants/entity.constants.d.ts.map +1 -1
- package/dist/constants/entity.constants.js +3 -0
- package/dist/constants/entity.constants.js.map +1 -1
- package/dist/constants/entity.maps.d.ts +6 -0
- package/dist/constants/entity.maps.d.ts.map +1 -1
- package/dist/constants/entity.maps.js +6 -0
- package/dist/constants/entity.maps.js.map +1 -1
- package/dist/index.d.ts +9 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -9
- package/dist/index.js.map +1 -1
- package/dist/migrations/1749600000004.CreateSysRolesTable.d.ts.map +1 -1
- package/dist/migrations/1749600000004.CreateSysRolesTable.js +7 -0
- package/dist/migrations/1749600000004.CreateSysRolesTable.js.map +1 -1
- package/dist/migrations/1749600000025.CreateSysScopesTable.d.ts +3 -0
- package/dist/migrations/1749600000025.CreateSysScopesTable.d.ts.map +1 -1
- package/dist/migrations/1749600000025.CreateSysScopesTable.js +16 -0
- package/dist/migrations/1749600000025.CreateSysScopesTable.js.map +1 -1
- package/dist/migrations/1749600000033.CreateSysPermissionsTable.d.ts +6 -0
- package/dist/migrations/1749600000033.CreateSysPermissionsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000033.CreateSysPermissionsTable.js +29 -0
- package/dist/migrations/1749600000033.CreateSysPermissionsTable.js.map +1 -0
- package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.d.ts +6 -0
- package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.d.ts.map +1 -0
- package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.js +32 -0
- package/dist/migrations/1749600000034.CreateSysRolePermissionsTable.js.map +1 -0
- package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.d.ts +6 -0
- package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.d.ts.map +1 -0
- package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.js +38 -0
- package/dist/migrations/1749600000035.CreateSysApiKeyRolesTable.js.map +1 -0
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.d.ts +6 -0
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.d.ts.map +1 -0
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.js +25 -0
- package/dist/migrations/1749600000036.SeedGlobalAdminRole.js.map +1 -0
- package/package.json +1 -1
- package/dist/auth/enums/role.tier.enum.d.ts +0 -6
- package/dist/auth/enums/role.tier.enum.d.ts.map +0 -1
- package/dist/auth/enums/role.tier.enum.js +0 -10
- 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()`, `
|
|
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)`
|
|
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,27 @@ 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
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
`
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
(
|
|
198
|
-
`
|
|
199
|
-
`
|
|
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. A role or permission carries its scope, so
|
|
197
|
+
`validateRole('inventory.reader')` alone also requires the tenant to hold
|
|
198
|
+
`inventory` — for everybody, `global.admin` and impersonators included; an unknown
|
|
199
|
+
role passes nobody. Above all of it sits `global.admin` (`TenantRole.GLOBAL_ADMIN`):
|
|
200
|
+
it clears every role and permission check whose scope the tenant holds.
|
|
201
|
+
|
|
202
|
+
Granting is delegated by scope. The top role of a scope (its smallest priority)
|
|
203
|
+
makes its holder a scope admin, who may invite with, grant and revoke that
|
|
204
|
+
scope's roles (and its child scopes') — nothing else. `global.admin` grants
|
|
205
|
+
anything, and alone deactivates or removes members. `GET /auth/me` returns the
|
|
206
|
+
caller's effective `permissions` and `grantable_scopes`.
|
|
200
207
|
|
|
201
208
|
For a feature that a whole organization is either enabled for or not, use
|
|
202
209
|
`validateAccess(scopeIdentifier, roleIdentifier?)`: it first checks that the
|
|
@@ -701,8 +708,19 @@ const { tenant } = this.apiKeyService.validateAccess('orders:read');
|
|
|
701
708
|
// tenant is the sys_tenants row the key acts for — never taken from the payload
|
|
702
709
|
```
|
|
703
710
|
|
|
704
|
-
|
|
705
|
-
`
|
|
711
|
+
A key can also hold roles inside its scopes (`sys_api_key_roles`, set at issue
|
|
712
|
+
with `role_ids` or through `POST /api/admin/api-keys/:id/roles`). The same
|
|
713
|
+
hierarchy applies, so a key's roles cover the roles they outrank and reach their
|
|
714
|
+
permissions:
|
|
715
|
+
|
|
716
|
+
```ts
|
|
717
|
+
this.apiKeyService.validateRole('inventory.reader');
|
|
718
|
+
this.apiKeyService.validatePermission('inventory.item.read');
|
|
719
|
+
```
|
|
720
|
+
|
|
721
|
+
`ApiKeyGuard` with `@ApiKeyScopes()`, `@ApiKeyRoles()` and `@ApiKeyPermissions()`
|
|
722
|
+
remains available for guard-based enforcement; `hasScope()` is `async` now that
|
|
723
|
+
grants are rows.
|
|
706
724
|
|
|
707
725
|
### Email Notifications (AWS SES)
|
|
708
726
|
|
|
@@ -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;
|
|
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":";;;;;;;;;;;;;;;;AAAA,2CAUwB;AACxB,6CAAuE;AACvE,mFAA8E;AAC9E,yEAAoE;AACpE,qEAAiE;AACjE,2EAAsE;AACtE,sFAAiF;AACjF,uEAAmE;AACnE,4EAAmE;AACnE,uEAAuE;AACvE,uEAAkE;AAClE,+EAA2E;AAC3E,0DAAsD;AACtD,gFAA0E;AAC1E,gFAA0E;AAC1E,6DAAuD;AACvD,+DAAyD;
|
|
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,
|
|
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,
|
|
1
|
+
{"version":3,"file":"admin.scope.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/admin.scope.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -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<
|
|
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;
|
|
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({
|
|
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
|
-
|
|
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:
|
|
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":";;;;;;;;;;;;;;;AAAA,2CASwB;AACxB,6CAAuE;AACvE,mFAA8E;AAC9E,2EAAsE;AACtE,sFAAiF;AACjF,qFAAgF;AAChF,qFAAiF;AACjF,4EAAmE;AACnE,uEAAuE;AACvE,0DAAsD;AACtD,wEAAmE;AACnE,mEAA+D;AAC/D,wFAAkF;AAClF,0EAAqE;AACrE,qEAA+D;AAC/D,yDAAoD;AACpD,+EAA0E;AAkBnE,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YACmB,kBAAsC,EACtC,WAAwB,EACxB,iBAAoC;QAFpC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,gBAAW,GAAX,WAAW,CAAa;QACxB,sBAAiB,GAAjB,iBAAiB,CAAmB;IACpD,CAAC;IAQE,AAAN,KAAK,CAAC,IAAI,CAAS,GAAqB;QACtC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,aAAa,EAAE,CAAC;QAC7D,OAAO,IAAI,oDAAuB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC1D,CAAC;IAOK,AAAN,KAAK,CAAC,IAAI,CAAS,GAAgB;QACjC,MAAM,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,EAAE,CAAC;QACtD,OAAO,IAAI,uCAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;
|
|
1
|
+
{"version":3,"file":"system.role.controller.js","sourceRoot":"","sources":["../../../src/admin/controllers/system.role.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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;
|
|
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
|