@elsikora/nestjs-crud-automator
Version:
A library for automating the creation of CRUD operations in NestJS.
36 lines (33 loc) • 2.26 kB
JavaScript
import '../../../enum/class/authorization/cache-mode.enum.js';
import '../../../enum/class/authorization/decision-type.enum.js';
import '../../../enum/class/authorization/effect.enum.js';
import '../../../enum/class/authorization/mode.enum.js';
import { EApiAuthorizationPermissionMatch } from '../../../enum/class/authorization/permission-match.enum.js';
import '../../../enum/class/authorization/policy/attachment-type.enum.js';
import '../../../enum/class/authorization/policy/on-type.enum.js';
import '../../../enum/class/authorization/policy/source-type.enum.js';
import '../../../enum/class/authorization/policy/status.enum.js';
import '../../../enum/class/authorization/principal-type.enum.js';
import { AuthorizationPermissionMatches } from './matches.utility.js';
/**
* Checks whether granted permissions satisfy the required permissions.
* An empty granted or required list never matches.
* @param {Array<string>} grantedPermissions - Permissions granted to the principal.
* @param {Array<string>} requiredPermissions - Concrete permissions required by the rule.
* @param {{ match?: EApiAuthorizationPermissionMatch }} [options] - Required permission matching strategy.
* @param {EApiAuthorizationPermissionMatch} [options.match] - `ANY` requires one matching permission, `ALL` requires every permission.
* @returns {boolean} True when the granted permissions satisfy the requested match strategy.
*/
function AuthorizationPermissionSetMatches(grantedPermissions, requiredPermissions, options = {}) {
if (grantedPermissions.length === 0 || requiredPermissions.length === 0) {
return false;
}
const matchMode = options.match ?? EApiAuthorizationPermissionMatch.ANY;
const hasRequiredPermission = (requiredPermission) => grantedPermissions.some((grantedPermission) => AuthorizationPermissionMatches(grantedPermission, requiredPermission));
if (matchMode === EApiAuthorizationPermissionMatch.ALL) {
return requiredPermissions.every((requiredPermission) => hasRequiredPermission(requiredPermission));
}
return requiredPermissions.some((requiredPermission) => hasRequiredPermission(requiredPermission));
}
export { AuthorizationPermissionSetMatches };
//# sourceMappingURL=set-matches.utility.js.map