UNPKG

@forestadmin/forestadmin-client

Version:

This package contains the logic to use the ForestAdmin API inside an agent.

79 lines 7.35 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const generate_actions_from_permissions_1 = __importDefault(require("./generate-actions-from-permissions")); const ttl_cache_1 = __importDefault(require("../utils/ttl-cache")); class ActionPermissionService { constructor(options, forestAdminServerInterface) { this.options = options; this.forestAdminServerInterface = forestAdminServerInterface; this.permissionsCache = new ttl_cache_1.default(this.fetchEnvironmentPermissions.bind(this), this.options.permissionsCacheDurationInSeconds * 1000); } async isDevelopmentPermission() { const permissions = await this.getPermissions(); // isDevelopment is true only for development environment return permissions.isDevelopment; } can(roleId, actionName) { return this.hasPermissionOrRefetch({ roleId, actionName, // Only allow refetch when not using server events allowRefetch: !this.options.instantCacheRefresh, }); } async hasPermissionOrRefetch({ roleId, actionName, allowRefetch, }) { const permissions = await this.getPermissions(); const isAllowed = this.isAllowed({ permissions, actionName, roleId }); if (!isAllowed && allowRefetch) { this.invalidateCache(); return this.hasPermissionOrRefetch({ roleId, actionName, allowRefetch: false, }); } this.options.logger('Debug', `User ${roleId} is ${isAllowed ? '' : 'not '}allowed to perform ${actionName}`); return isAllowed; } isAllowed({ permissions, actionName, roleId, }) { // In development everything is allowed return Boolean(permissions.isDevelopment || permissions.actionsGloballyAllowed.has(actionName) || permissions.actionsByRole.get(actionName)?.allowedRoles.has(roleId)); } async getPermissions() { return this.permissionsCache.fetch('currentEnvironment'); } async fetchEnvironmentPermissions() { this.options.logger('Debug', 'Fetching environment permissions'); const rawPermissions = await this.forestAdminServerInterface.getEnvironmentPermissions(this.options); return (0, generate_actions_from_permissions_1.default)(rawPermissions); } async getCustomActionCondition(roleId, actionName) { const permissions = await this.getPermissions(); const conditionFilter = permissions.actionsByRole.get(actionName)?.conditionsByRole.get(roleId); return conditionFilter; } async getAllCustomActionConditions(actionName) { const permissions = await this.getPermissions(); return permissions.actionsByRole.get(actionName)?.conditionsByRole; } async getRoleIdsAllowedToApproveWithoutConditions(actionName) { const permissions = await this.getPermissions(); const approvalPermission = permissions.actionsByRole.get(actionName); if (!approvalPermission) { return []; } // All allowed roles excluding the one with conditions return Array.from(approvalPermission.allowedRoles).filter(roleId => !approvalPermission.conditionsByRole?.has(roleId)); } invalidateCache() { this.options.logger('Debug', 'Invalidating roles permissions cache..'); this.permissionsCache.clear(); } } exports.default = ActionPermissionService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXBlcm1pc3Npb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGVybWlzc2lvbnMvYWN0aW9uLXBlcm1pc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFHQSw0R0FFNkM7QUFFN0MsbUVBQTBDO0FBRTFDLE1BQXFCLHVCQUF1QjtJQUcxQyxZQUNtQixPQUE2QyxFQUM3QywwQkFBc0Q7UUFEdEQsWUFBTyxHQUFQLE9BQU8sQ0FBc0M7UUFDN0MsK0JBQTBCLEdBQTFCLDBCQUEwQixDQUE0QjtRQUV2RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxtQkFBUSxDQUNsQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FDdEQsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsdUJBQXVCO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRWhELHlEQUF5RDtRQUN6RCxPQUFPLFdBQVcsQ0FBQyxhQUFhLENBQUM7SUFDbkMsQ0FBQztJQUVNLEdBQUcsQ0FBQyxNQUFjLEVBQUUsVUFBa0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7WUFDakMsTUFBTTtZQUNOLFVBQVU7WUFDVixrREFBa0Q7WUFDbEQsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUI7U0FDaEQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxFQUNuQyxNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksR0FLYjtRQUNDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDLFNBQVMsSUFBSSxZQUFZLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBRXZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO2dCQUNqQyxNQUFNO2dCQUNOLFVBQVU7Z0JBQ1YsWUFBWSxFQUFFLEtBQUs7YUFDcEIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDakIsT0FBTyxFQUNQLFFBQVEsTUFBTSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLHNCQUFzQixVQUFVLEVBQUUsQ0FDL0UsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxTQUFTLENBQUMsRUFDaEIsV0FBVyxFQUNYLFVBQVUsRUFDVixNQUFNLEdBS1A7UUFDQyx1Q0FBdUM7UUFDdkMsT0FBTyxPQUFPLENBQ1osV0FBVyxDQUFDLGFBQWE7WUFDdkIsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDbEQsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FDdEUsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYztRQUMxQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQjtRQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUVqRSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyx5QkFBeUIsQ0FDcEYsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO1FBRUYsT0FBTyxJQUFBLDJDQUE4QixFQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFTSxLQUFLLENBQUMsd0JBQXdCLENBQ25DLE1BQWMsRUFDZCxVQUFrQjtRQUVsQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVoRCxNQUFNLGVBQWUsR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEcsT0FBTyxlQUFlLENBQUM7SUFDekIsQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FDdkMsVUFBa0I7UUFFbEIsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFaEQsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztJQUNyRSxDQUFDO0lBRU0sS0FBSyxDQUFDLDJDQUEyQyxDQUN0RCxVQUFrQjtRQUVsQixNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUVoRCxNQUFNLGtCQUFrQixHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXJFLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN2QixPQUFPLEVBQUUsQ0FBQztTQUNYO1FBRUQsc0RBQXNEO1FBQ3RELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQ3ZELE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQzVELENBQUM7SUFDSixDQUFDO0lBRU0sZUFBZTtRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsd0NBQXdDLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBbklELDBDQW1JQyJ9