@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
216 lines (213 loc) • 12.1 kB
JavaScript
;
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