UNPKG

@elsikora/nestjs-crud-automator

Version:

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

216 lines (213 loc) 12.1 kB
'use strict'; var tslib_es6 = require('../../external/tslib/tslib.es6.js'); var bootstrapValidation_service_class = require('../../class/api/authorization/bootstrap-validation.service.class.js'); var cacheInvalidation_service_class = require('../../class/api/authorization/cache-invalidation.service.class.js'); var engine_class = require('../../class/api/authorization/engine.class.js'); var guard_class = require('../../class/api/authorization/guard.class.js'); var cache_class = require('../../class/api/authorization/hook/permission/cache.class.js'); var resolver_class = require('../../class/api/authorization/hook/permission/resolver.class.js'); var cache_class$1 = require('../../class/api/authorization/iam/attachment/cache.class.js'); var resolver_class$1 = require('../../class/api/authorization/iam/attachment/resolver.class.js'); var cache_class$2 = require('../../class/api/authorization/iam/document/cache.class.js'); var resolver_class$2 = require('../../class/api/authorization/iam/document/resolver.class.js'); var validator_class = require('../../class/api/authorization/iam/document/validator.class.js'); var engine_class$1 = require('../../class/api/authorization/iam/engine.class.js'); var queryPlanner_class = require('../../class/api/authorization/iam/query-planner.class.js'); require('../../enum/class/authorization/cache-mode.enum.js'); require('../../enum/class/authorization/decision-type.enum.js'); require('../../enum/class/authorization/effect.enum.js'); require('../../enum/class/authorization/mode.enum.js'); require('../../enum/class/authorization/permission-match.enum.js'); require('../../enum/class/authorization/policy/attachment-type.enum.js'); require('../../enum/class/authorization/policy/on-type.enum.js'); require('../../enum/class/authorization/policy/source-type.enum.js'); require('../../enum/class/authorization/policy/status.enum.js'); require('../../enum/class/authorization/principal-type.enum.js'); var hookPermissionSourcesToken_constant = require('../../constant/class/authorization/hook-permission-sources-token.constant.js'); var moduleOptionsToken_constant = require('../../constant/class/authorization/module-options-token.constant.js'); var attachmentSourcesToken_constant = require('../../constant/class/authorization/policy/attachment-sources-token.constant.js'); var documentSourcesToken_constant = require('../../constant/class/authorization/policy/document-sources-token.constant.js'); var principalResolverToken_constant = require('../../constant/class/authorization/principal-resolver-token.constant.js'); var tokenRegistry_constant = require('../../constant/class/authorization/token-registry.constant.js'); require('typeorm'); var discoveryService_class = require('../../class/api/authorization/policy/discovery-service.class.js'); require('../../class/api/authorization/policy/executor.class.js'); var registry_class = require('../../class/api/authorization/policy/registry.class.js'); var runtime_class = require('../../class/api/authorization/runtime.class.js'); var simulator_class = require('../../class/api/authorization/simulator.class.js'); var common = require('@nestjs/common'); var core = require('@nestjs/core'); var exception_utility = require('../../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} */ exports.ApiAuthorizationModule = ApiAuthorizationModule_1 = class ApiAuthorizationModule { static forRoot(options = {}) { const providers = [ { provide: moduleOptionsToken_constant.AUTHORIZATION_MODULE_OPTIONS_TOKEN, useValue: options, }, ]; const exportTokens = []; if (options.principalResolver) { providers.push({ provide: principalResolverToken_constant.AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN, useValue: options.principalResolver, }); exportTokens.push(principalResolverToken_constant.AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN); } if (options.hookPermissionSources) { providers.push({ provide: hookPermissionSourcesToken_constant.AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN, useValue: options.hookPermissionSources, }); exportTokens.push(hookPermissionSourcesToken_constant.AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN); } if (options.iam?.attachmentSources) { providers.push({ provide: attachmentSourcesToken_constant.AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN, useValue: options.iam.attachmentSources, }); exportTokens.push(attachmentSourcesToken_constant.AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN); } if (options.iam?.documentSources) { providers.push({ provide: documentSourcesToken_constant.AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN, useValue: options.iam.documentSources, }); exportTokens.push(documentSourcesToken_constant.AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN); } return { exports: [cacheInvalidation_service_class.ApiAuthorizationCacheInvalidationService, ...exportTokens], // eslint-disable-next-line @elsikora/typescript/naming-convention global: true, module: ApiAuthorizationModule_1, providers, }; } static forRootAsync(options) { return { exports: [cacheInvalidation_service_class.ApiAuthorizationCacheInvalidationService, hookPermissionSourcesToken_constant.AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN, attachmentSourcesToken_constant.AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN, documentSourcesToken_constant.AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN, principalResolverToken_constant.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 exception_utility.ErrorException("ApiAuthorizationModule.forRootAsync requires useFactory, useClass, or useExisting"); } return { inject: [optionsFactoryToken], provide: moduleOptionsToken_constant.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 exception_utility.ErrorException("ApiAuthorizationModule.forRootAsync requires exactly one async configuration strategy"); } if (options.useFactory) { return [ { inject: options.inject ?? [], provide: moduleOptionsToken_constant.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: [moduleOptionsToken_constant.AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: principalResolverToken_constant.AUTHORIZATION_PRINCIPAL_RESOLVER_TOKEN, useFactory: (options) => options.principalResolver, }, { inject: [moduleOptionsToken_constant.AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: hookPermissionSourcesToken_constant.AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN, useFactory: (options) => options.hookPermissionSources ?? [], }, { inject: [moduleOptionsToken_constant.AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: attachmentSourcesToken_constant.AUTHORIZATION_POLICY_ATTACHMENT_SOURCES_TOKEN, useFactory: (options) => options.iam?.attachmentSources ?? [], }, { inject: [moduleOptionsToken_constant.AUTHORIZATION_MODULE_OPTIONS_TOKEN], provide: documentSourcesToken_constant.AUTHORIZATION_POLICY_DOCUMENT_SOURCES_TOKEN, useFactory: (options) => options.iam?.documentSources ?? [], }, ]; } }; exports.ApiAuthorizationModule = ApiAuthorizationModule_1 = tslib_es6.__decorate([ common.Global(), common.Module({ exports: [ bootstrapValidation_service_class.ApiAuthorizationBootstrapValidationService, cacheInvalidation_service_class.ApiAuthorizationCacheInvalidationService, engine_class.ApiAuthorizationEngine, guard_class.ApiAuthorizationGuard, resolver_class.ApiAuthorizationHookPermissionResolver, resolver_class$1.ApiAuthorizationIamAttachmentResolver, resolver_class$2.ApiAuthorizationIamDocumentResolver, validator_class.ApiAuthorizationIamDocumentValidator, engine_class$1.ApiAuthorizationIamEngine, queryPlanner_class.ApiAuthorizationIamQueryPlanner, discoveryService_class.ApiAuthorizationPolicyDiscoveryService, runtime_class.ApiAuthorizationRuntime, simulator_class.ApiAuthorizationSimulator, tokenRegistry_constant.AUTHORIZATION_POLICY_REGISTRY_TOKEN, ], imports: [core.DiscoveryModule], providers: [ bootstrapValidation_service_class.ApiAuthorizationBootstrapValidationService, cacheInvalidation_service_class.ApiAuthorizationCacheInvalidationService, engine_class.ApiAuthorizationEngine, guard_class.ApiAuthorizationGuard, cache_class.ApiAuthorizationHookPermissionCache, resolver_class.ApiAuthorizationHookPermissionResolver, cache_class$1.ApiAuthorizationIamAttachmentCache, resolver_class$1.ApiAuthorizationIamAttachmentResolver, cache_class$2.ApiAuthorizationIamDocumentCache, resolver_class$2.ApiAuthorizationIamDocumentResolver, validator_class.ApiAuthorizationIamDocumentValidator, engine_class$1.ApiAuthorizationIamEngine, queryPlanner_class.ApiAuthorizationIamQueryPlanner, discoveryService_class.ApiAuthorizationPolicyDiscoveryService, runtime_class.ApiAuthorizationRuntime, simulator_class.ApiAuthorizationSimulator, { provide: tokenRegistry_constant.AUTHORIZATION_POLICY_REGISTRY_TOKEN, useValue: registry_class.apiAuthorizationPolicyRegistry, }, { provide: registry_class.ApiAuthorizationPolicyRegistry, useValue: registry_class.apiAuthorizationPolicyRegistry, }, { provide: moduleOptionsToken_constant.AUTHORIZATION_MODULE_OPTIONS_TOKEN, useValue: {}, }, ], }) ], exports.ApiAuthorizationModule); //# sourceMappingURL=authorization.module.js.map