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