@backstage-community/plugin-rbac-backend
Version:
76 lines (72 loc) • 2.17 kB
JavaScript
;
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