@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
48 lines (45 loc) • 2.22 kB
JavaScript
import { __decorate, __param, __metadata } from '../../../../../external/tslib/tslib.es6.js';
import { ApiAuthorizationHookPermissionCache } from './cache.class.js';
import { AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN } from '../../../../../constant/class/authorization/hook-permission-sources-token.constant.js';
import { Injectable, Inject, Optional } from '@nestjs/common';
import { LoggerUtility } from '../../../../../utility/logger.utility.js';
const hookPermissionResolverLogger = LoggerUtility.getLogger("ApiAuthorizationHookPermissionResolver");
let ApiAuthorizationHookPermissionResolver = class ApiAuthorizationHookPermissionResolver {
cache;
sources;
constructor(cache, sources = []) {
this.cache = cache;
this.sources = sources;
}
clear() {
this.cache.clear();
}
async resolve(principal) {
const cachedPermissions = this.cache.get(principal);
if (cachedPermissions) {
hookPermissionResolverLogger.verbose(`Using cached hook permissions for principal "${principal.id}" (${cachedPermissions.length} permissions).`);
return cachedPermissions;
}
const permissions = new Set();
for (const source of this.sources) {
const resolvedPermissions = await source.getPermissions(principal);
for (const permission of resolvedPermissions) {
if (typeof permission === "string" && permission.length > 0) {
permissions.add(permission);
}
}
}
const result = [...permissions];
this.cache.set(principal, result);
hookPermissionResolverLogger.verbose(`Resolved ${result.length} hook permissions for principal "${principal.id}" from ${this.sources.length} sources.`);
return result;
}
};
ApiAuthorizationHookPermissionResolver = __decorate([
Injectable(),
__param(1, Inject(AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN)),
__param(1, Optional()),
__metadata("design:paramtypes", [ApiAuthorizationHookPermissionCache, Array])
], ApiAuthorizationHookPermissionResolver);
export { ApiAuthorizationHookPermissionResolver };
//# sourceMappingURL=resolver.class.js.map