@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
44 lines (40 loc) • 2.07 kB
JavaScript
;
var onType_enum = require('../../../../enum/class/authorization/policy/on-type.enum.js');
var routeType_enum = require('../../../../enum/decorator/api/route-type.enum.js');
var capitalizeString_utility = require('../../../../utility/capitalize-string.utility.js');
var logger_utility = require('../../../../utility/logger.utility.js');
const policyExecutorLogger = logger_utility.LoggerUtility.getLogger("ApiAuthorizationPolicyExecutor");
class ApiAuthorizationPolicyExecutor {
static async execute(subscriber, action, context) {
const routeType = context.routeType ?? this.resolveRouteType(action);
if (routeType) {
const hookName = `on${onType_enum.EApiAuthorizationPolicyOnType.BEFORE}${capitalizeString_utility.CapitalizeString(routeType)}`;
const hook = subscriber[hookName];
if (typeof hook === "function") {
policyExecutorLogger.verbose(`Executing authorization policy hook ${hookName} from ${subscriber.constructor.name} for action "${action}"`);
const typedHook = hook;
const result = typedHook.call(subscriber, context);
return this.normalizeRuleResult(await result);
}
return [];
}
if (typeof subscriber.getCustomActionRule !== "function") {
return [];
}
const customActionHook = subscriber.getCustomActionRule.bind(subscriber);
const customResult = customActionHook(action, context);
return this.normalizeRuleResult(await customResult);
}
static normalizeRuleResult(result) {
if (Array.isArray(result)) {
return result.filter((rule) => rule != null);
}
return result ? [result] : [];
}
static resolveRouteType(action) {
const routeTypes = Object.values(routeType_enum.EApiRouteType);
return routeTypes.find((routeType) => routeType === action);
}
}
exports.ApiAuthorizationPolicyExecutor = ApiAuthorizationPolicyExecutor;
//# sourceMappingURL=executor.class.js.map