mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-04 12:26:13 +00:00
fix: use proxy on metadata permissions check to handle missing keys
This commit is contained in:
@@ -29,4 +29,18 @@ function validateOrgSSO(actorAuthMethod: ActorAuthMethod, isOrgSsoEnforced: TOrg
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { isAuthMethodSaml, validateOrgSSO };
|
const escapeHandlebarsMissingMetadata = (obj: Record<string, string>) => {
|
||||||
|
const handler = {
|
||||||
|
get(target: Record<string, string>, prop: string) {
|
||||||
|
if (!(prop in target)) {
|
||||||
|
// eslint-disable-next-line no-param-reassign
|
||||||
|
target[prop] = `{{identity.metadata.${prop}}}`; // Add missing key as an "own" property
|
||||||
|
}
|
||||||
|
return target[prop];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return new Proxy(obj, handler);
|
||||||
|
};
|
||||||
|
|
||||||
|
export { escapeHandlebarsMissingMetadata, isAuthMethodSaml, validateOrgSSO };
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ import { TServiceTokenDALFactory } from "@app/services/service-token/service-tok
|
|||||||
|
|
||||||
import { orgAdminPermissions, orgMemberPermissions, orgNoAccessPermissions, OrgPermissionSet } from "./org-permission";
|
import { orgAdminPermissions, orgMemberPermissions, orgNoAccessPermissions, OrgPermissionSet } from "./org-permission";
|
||||||
import { TPermissionDALFactory } from "./permission-dal";
|
import { TPermissionDALFactory } from "./permission-dal";
|
||||||
import { validateOrgSSO } from "./permission-fns";
|
import { escapeHandlebarsMissingMetadata, validateOrgSSO } from "./permission-fns";
|
||||||
import { TBuildOrgPermissionDTO, TBuildProjectPermissionDTO } from "./permission-service-types";
|
import { TBuildOrgPermissionDTO, TBuildProjectPermissionDTO } from "./permission-service-types";
|
||||||
import {
|
import {
|
||||||
buildServiceTokenProjectPermission,
|
buildServiceTokenProjectPermission,
|
||||||
@@ -227,11 +227,13 @@ export const permissionServiceFactory = ({
|
|||||||
})) || [];
|
})) || [];
|
||||||
|
|
||||||
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
|
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
|
||||||
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false, strict: true });
|
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false });
|
||||||
const metadataKeyValuePair = objectify(
|
const metadataKeyValuePair = escapeHandlebarsMissingMetadata(
|
||||||
userProjectPermission.metadata,
|
objectify(
|
||||||
(i) => i.key,
|
userProjectPermission.metadata,
|
||||||
(i) => i.value
|
(i) => i.key,
|
||||||
|
(i) => i.value
|
||||||
|
)
|
||||||
);
|
);
|
||||||
const interpolateRules = templatedRules(
|
const interpolateRules = templatedRules(
|
||||||
{
|
{
|
||||||
@@ -292,12 +294,15 @@ export const permissionServiceFactory = ({
|
|||||||
})) || [];
|
})) || [];
|
||||||
|
|
||||||
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
|
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
|
||||||
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false, strict: true });
|
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false });
|
||||||
const metadataKeyValuePair = objectify(
|
const metadataKeyValuePair = escapeHandlebarsMissingMetadata(
|
||||||
identityProjectPermission.metadata,
|
objectify(
|
||||||
(i) => i.key,
|
identityProjectPermission.metadata,
|
||||||
(i) => i.value
|
(i) => i.key,
|
||||||
|
(i) => i.value
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
const interpolateRules = templatedRules(
|
const interpolateRules = templatedRules(
|
||||||
{
|
{
|
||||||
identity: {
|
identity: {
|
||||||
|
|||||||
Reference in New Issue
Block a user