UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

216 lines (213 loc) 10.9 kB
import { __decorate } from '../../external/tslib/tslib.es6.js'; import { ApiAuthorizationBootstrapValidationService } from '../../class/api/authorization/bootstrap-validation.service.class.js'; import { ApiAuthorizationCacheInvalidationService } from '../../class/api/authorization/cache-invalidation.service.class.js'; import { ApiAuthorizationEngine } from '../../class/api/authorization/engine.class.js'; import { ApiAuthorizationGuard } from '../../class/api/authorization/guard.class.js'; import { ApiAuthorizationHookPermissionCache } from '../../class/api/authorization/hook/permission/cache.class.js'; import { ApiAuthorizationHookPermissionResolver } from '../../class/api/authorization/hook/permission/resolver.class.js'; import { ApiAuthorizationIamAttachmentCache } from '../../class/api/authorization/iam/attachment/cache.class.js'; import { ApiAuthorizationIamAttachmentResolver } from '../../class/api/authorization/iam/attachment/resolver.class.js'; import { ApiAuthorizationIamDocumentCache } from '../../class/api/authorization/iam/document/cache.class.js'; import { ApiAuthorizationIamDocumentResolver } from '../../class/api/authorization/iam/document/resolver.class.js'; import { ApiAuthorizationIamDocumentValidator } from '../../class/api/authorization/iam/document/validator.class.js'; import { ApiAuthorizationIamEngine } from '../../class/api/authorization/iam/engine.class.js'; import { ApiAuthorizationIamQueryPlanner } from '../../class/api/authorization/iam/query-planner.class.js'; import '../../enum/class/authorization/cache-mode.enum.js'; import '../../enum/class/authorization/decision-type.enum.js'; import '../../enum/class/authorization/effect.enum.js'; import '../../enum/class/authorization/mode.enum.js'; import '../../enum/class/authorization/permission-match.enum.js'; import '../../enum/class/authorization/policy/attachment-type.enum.js'; import '../../enum/class/authorization/policy/on-type.enum.js'; import '../../enum/class/authorization/policy/source-type.enum.js'; import '../../enum/class/authorization/policy/status.enum.js'; import '../../enum/class/authorization/principal-type.enum.js'; import { AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN } from '../../constant/class/authorization/hook-permission-sources-token.constant.js'; import { AUTHORIZATION_MODULE_OPTIONS_TOKEN } from '../../constant/class/authorization/module-options-token.constant.js'; import { AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN } from '../../constant/class/authorization/policy/attachment-sources-token.constant.js'; import { AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN } from '../../constant/class/authorization/policy/document-sources-token.constant.js'; import { AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN } from '../../constant/class/authorization/principal-resolver-token.constant.js'; import { AUTHORIZATION_POLICY_REGISTRY_TOKEN } from '../../constant/class/authorization/token-registry.constant.js'; import 'typeorm'; import { ApiAuthorizationPolicyDiscoveryService } from '../../class/api/authorization/policy/discovery-service.class.js'; import '../../class/api/authorization/policy/executor.class.js'; import { apiAuthorizationPolicyRegistry, ApiAuthorizationPolicyRegistry } from '../../class/api/authorization/policy/registry.class.js'; import { ApiAuthorizationRuntime } from '../../class/api/authorization/runtime.class.js'; import { ApiAuthorizationSimulator } from '../../class/api/authorization/simulator.class.js'; import { Global, Module } from '@nestjs/common'; import { DiscoveryModule } from '@nestjs/core'; import { ErrorException } from '../../utility/error/exception.utility.js'; var ApiAuthorizationModule_1; /** * Module responsible for discovering and registering authorization policies. * Import this module to enable zero-configuration RBAC. * @see {@link https://elsikora.com/docs/nestjs-crud-automator/authorization | Authorization} */ let ApiAuthorizationModule = ApiAuthorizationModule_1 = class ApiAuthorizationModule { static forRoot(options = {}) { const providers = [ { provide: AUTHORIZATION_MODULE_OPTIONS_TOKEN, useValue: options, }, ]; const exportTokens = []; if (options.principalResolver) { providers.push({ provide: AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN, useValue: options.principalResolver, }); exportTokens.push(AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN); } if (options.hookPermissionSources) { providers.push({ provide: AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN, useValue: options.hookPermissionSources, }); exportTokens.push(AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN); } if (options.iam?.attachmentSources) { providers.push({ provide: AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN, useValue: options.iam.attachmentSources, }); exportTokens.push(AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN); } if (options.iam?.documentSources) { providers.push({ provide: AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN, useValue: options.iam.documentSources, }); exportTokens.push(AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN); } return { exports: [ApiAuthorizationCacheInvalidationService, ...exportTokens], // eslint-disable-next-line @elsikora/typescript/naming-convention global: true, module: ApiAuthorizationModule_1, providers, }; } static forRootAsync(options) { return { exports: [ApiAuthorizationCacheInvalidationService, AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN, AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN, AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN, AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN], // eslint-disable-next-line @elsikora/typescript/naming-convention global: true, imports: options.imports ?? [], module: ApiAuthorizationModule_1, providers: [...ApiAuthorizationModule_1.createAsyncOptionsProviders(options), ...ApiAuthorizationModule_1.createDerivedOptionProviders()], }; } static createAsyncOptionsProvider(options) { const optionsFactoryToken = options.useExisting ?? options.useClass; if (!optionsFactoryToken) { throw ErrorException("ApiAuthorizationModule.forRootAsync requires useFactory, useClass, or useExisting"); } return { inject: [optionsFactoryToken], provide: AUTHORIZATION_MODULE_OPTIONS_TOKEN, useFactory: async (optionsFactory) => await optionsFactory.createApiAuthorizationModuleOptions(), }; } static createAsyncOptionsProviders(options) { const strategyCount = [options.useFactory, options.useClass, options.useExisting].filter(Boolean).length; if (strategyCount !== 1) { throw ErrorException("ApiAuthorizationModule.forRootAsync requires exactly one async configuration strategy"); } if (options.useFactory) { return [ { inject: options.inject ?? [], provide: AUTHORIZATION_MODULE_OPTIONS_TOKEN, useFactory: options.useFactory, }, ]; } const providers = [ApiAuthorizationModule_1.createAsyncOptionsProvider(options)]; if (options.useClass) { providers.push({ provide: options.useClass, useClass: options.useClass, }); } return providers; } static createDerivedOptionProviders() { return [ { inject: [AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN, useFactory: (options) => options.principalResolver, }, { inject: [AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN, useFactory: (options) => options.hookPermissionSources ?? [], }, { inject: [AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN, useFactory: (options) => options.iam?.attachmentSources ?? [], }, { inject: [AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN, useFactory: (options) => options.iam?.documentSources ?? [], }, ]; } }; ApiAuthorizationModule = ApiAuthorizationModule_1 = __decorate([ Global(), Module({ exports: [ ApiAuthorizationBootstrapValidationService, ApiAuthorizationCacheInvalidationService, ApiAuthorizationEngine, ApiAuthorizationGuard, ApiAuthorizationHookPermissionResolver, ApiAuthorizationIamAttachmentResolver, ApiAuthorizationIamDocumentResolver, ApiAuthorizationIamDocumentValidator, ApiAuthorizationIamEngine, ApiAuthorizationIamQueryPlanner, ApiAuthorizationPolicyDiscoveryService, ApiAuthorizationRuntime, ApiAuthorizationSimulator, AUTHORIZATION_POLICY_REGISTRY_TOKEN, ], imports: [DiscoveryModule], providers: [ ApiAuthorizationBootstrapValidationService, ApiAuthorizationCacheInvalidationService, ApiAuthorizationEngine, ApiAuthorizationGuard, ApiAuthorizationHookPermissionCache, ApiAuthorizationHookPermissionResolver, ApiAuthorizationIamAttachmentCache, ApiAuthorizationIamAttachmentResolver, ApiAuthorizationIamDocumentCache, ApiAuthorizationIamDocumentResolver, ApiAuthorizationIamDocumentValidator, ApiAuthorizationIamEngine, ApiAuthorizationIamQueryPlanner, ApiAuthorizationPolicyDiscoveryService, ApiAuthorizationRuntime, ApiAuthorizationSimulator, { provide: AUTHORIZATION_POLICY_REGISTRY_TOKEN, useValue: apiAuthorizationPolicyRegistry, }, { provide: ApiAuthorizationPolicyRegistry, useValue: apiAuthorizationPolicyRegistry, }, { provide: AUTHORIZATION_MODULE_OPTIONS_TOKEN, useValue: {}, }, ], }) ], ApiAuthorizationModule); export { ApiAuthorizationModule }; //# sourceMappingURL=authorization.module.js.map