UNPKG

@backstage-community/plugin-rbac-backend

Version:
76 lines (72 loc) 2.17 kB
'use strict'; var pluginRbacCommon = require('@backstage-community/plugin-rbac-common'); function isOwnerRefsAlias(value) { const alias = `${pluginRbacCommon.CONDITION_ALIAS_SIGN}${pluginRbacCommon.ConditionalAliases.OWNER_REFS}`; return value === alias; } function isCurrentUserAlias(value) { const alias = `${pluginRbacCommon.CONDITION_ALIAS_SIGN}${pluginRbacCommon.ConditionalAliases.CURRENT_USER}`; return value === alias; } function replaceAliasWithValue(params, key, predicate, newValue) { if (!params) { return params; } if (Array.isArray(params[key])) { const oldValues = params[key]; const nonAliasValues = []; for (const oldValue2 of oldValues) { const isAliasMatched2 = predicate(oldValue2); if (isAliasMatched2) { const newValues = Array.isArray(newValue) ? newValue : [newValue]; nonAliasValues.push(...newValues); } else { nonAliasValues.push(oldValue2); } } return { ...params, [key]: nonAliasValues }; } const oldValue = params[key]; const isAliasMatched = predicate(oldValue); if (isAliasMatched && !Array.isArray(newValue)) { return { ...params, [key]: newValue }; } return params; } function replaceAliases(conditions, userInfo) { if ("not" in conditions) { replaceAliases(conditions.not, userInfo); return; } if ("allOf" in conditions) { for (const condition of conditions.allOf) { replaceAliases(condition, userInfo); } return; } if ("anyOf" in conditions) { for (const condition of conditions.anyOf) { replaceAliases(condition, userInfo); } return; } if (conditions.params) { for (const key of Object.keys(conditions.params)) { let modifiedParams = replaceAliasWithValue( conditions.params, key, isCurrentUserAlias, userInfo.userEntityRef ); modifiedParams = replaceAliasWithValue( modifiedParams, key, isOwnerRefsAlias, userInfo.ownershipEntityRefs ); conditions.params = modifiedParams; } } } exports.replaceAliases = replaceAliases; //# sourceMappingURL=alias-resolver.cjs.js.map