@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
48 lines (45 loc) • 2.25 kB
JavaScript
;
var tslib_es6 = require('../../../../../external/tslib/tslib.es6.js');
var cache_class = require('./cache.class.js');
var hookPermissionSourcesToken_constant = require('../../../../../constant/class/authorization/hook-permission-sources-token.constant.js');
var common = require('@nestjs/common');
var logger_utility = require('../../../../../utility/logger.utility.js');
const hookPermissionResolverLogger = logger_utility.LoggerUtility.getLogger("ApiAuthorizationHookPermissionResolver");
exports.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;
}
};
exports.ApiAuthorizationHookPermissionResolver = tslib_es6.__decorate([
common.Injectable(),
tslib_es6.__param(1, common.Inject(hookPermissionSourcesToken_constant.AUTHORIZATION_HOOK_PERMISSION_SOURCES_TOKEN)),
tslib_es6.__param(1, common.Optional()),
tslib_es6.__metadata("design:paramtypes", [cache_class.ApiAuthorizationHookPermissionCache, Array])
], exports.ApiAuthorizationHookPermissionResolver);
//# sourceMappingURL=resolver.class.js.map