UNPKG

@elsikora/nestjs-crud-automator

Version:

A library for automating the creation of CRUD operations in NestJS.

48 lines (45 loc) 2.22 kB
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