feat: updated code to auth field in permission for identity

This commit is contained in:
=
2025-03-18 20:53:51 +05:30
parent 78f83cb478
commit 1b2128e3cc
2 changed files with 40 additions and 36 deletions
@@ -131,12 +131,12 @@ function validateOrgSSO(actorAuthMethod: ActorAuthMethod, isOrgSsoEnforced: TOrg
} }
} }
const escapeHandlebarsMissingMetadata = (obj: Record<string, string>) => { const escapeHandlebarsMissingDict = (obj: Record<string, string>, key = "identity.metadata") => {
const handler = { const handler = {
get(target: Record<string, string>, prop: string) { get(target: Record<string, string>, prop: string) {
if (!(prop in target)) { if (!Object.hasOwn(target, prop)) {
// eslint-disable-next-line no-param-reassign // eslint-disable-next-line no-param-reassign
target[prop] = `{{identity.metadata.${prop}}}`; // Add missing key as an "own" property target[prop] = `{{${key}.${prop}}}`; // Add missing key as an "own" property
} }
return target[prop]; return target[prop];
} }
@@ -145,4 +145,4 @@ const escapeHandlebarsMissingMetadata = (obj: Record<string, string>) => {
return new Proxy(obj, handler); return new Proxy(obj, handler);
}; };
export { escapeHandlebarsMissingMetadata, isAuthMethodSaml, validateOrgSSO }; export { escapeHandlebarsMissingDict, isAuthMethodSaml, validateOrgSSO };
@@ -23,7 +23,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 { escapeHandlebarsMissingMetadata, validateOrgSSO } from "./permission-fns"; import { escapeHandlebarsMissingDict, validateOrgSSO } from "./permission-fns";
import { import {
TBuildOrgPermissionDTO, TBuildOrgPermissionDTO,
TBuildProjectPermissionDTO, TBuildProjectPermissionDTO,
@@ -244,20 +244,21 @@ export const permissionServiceFactory = ({
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges)); const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false }); const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false });
const metadataKeyValuePair = escapeHandlebarsMissingMetadata( const metadataKeyValuePair = escapeHandlebarsMissingDict(
objectify( objectify(
userProjectPermission.metadata, userProjectPermission.metadata,
(i) => i.key, (i) => i.key,
(i) => i.value (i) => i.value
) )
); );
const templateValue = {
id: userProjectPermission.userId,
username: userProjectPermission.username,
metadata: metadataKeyValuePair
};
const interpolateRules = templatedRules( const interpolateRules = templatedRules(
{ {
identity: { identity: templateValue
id: userProjectPermission.userId,
username: userProjectPermission.username,
metadata: metadataKeyValuePair
}
}, },
{ data: false } { data: false }
); );
@@ -318,24 +319,26 @@ export const permissionServiceFactory = ({
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges)); const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false }); const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false });
const identityAuthInfo = requestContext.get("identityAuthInfo"); const unescapedIdentityAuthInfo = requestContext.get("identityAuthInfo");
const unescapedMetadata = objectify( const unescapedMetadata = objectify(
identityProjectPermission.metadata, identityProjectPermission.metadata,
(i) => i.key, (i) => i.key,
(i) => i.value (i) => i.value
// eslint-disable-next-line @typescript-eslint/no-explicit-any );
) as Record<string, any>; const identityAuthInfo =
if (identityAuthInfo?.identityId === identityId && identityAuthInfo) { unescapedIdentityAuthInfo?.identityId === identityId && unescapedIdentityAuthInfo
unescapedMetadata.auth = identityAuthInfo; ? escapeHandlebarsMissingDict(unescapedIdentityAuthInfo as never, "identity.auth")
} : {};
const metadataKeyValuePair = escapeHandlebarsMissingMetadata(unescapedMetadata); const metadataKeyValuePair = escapeHandlebarsMissingDict(unescapedMetadata);
const templateValue = {
id: identityProjectPermission.identityId,
username: identityProjectPermission.username,
metadata: metadataKeyValuePair,
auth: identityAuthInfo
};
const interpolateRules = templatedRules( const interpolateRules = templatedRules(
{ {
identity: { identity: templateValue
id: identityProjectPermission.identityId,
username: identityProjectPermission.username,
metadata: metadataKeyValuePair
}
}, },
{ data: false } { data: false }
); );
@@ -428,20 +431,21 @@ export const permissionServiceFactory = ({
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges)); const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false }); const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false });
const metadataKeyValuePair = escapeHandlebarsMissingMetadata( const metadataKeyValuePair = escapeHandlebarsMissingDict(
objectify( objectify(
userProjectPermission.metadata, userProjectPermission.metadata,
(i) => i.key, (i) => i.key,
(i) => i.value (i) => i.value
) )
); );
const templateValue = {
id: userProjectPermission.userId,
username: userProjectPermission.username,
metadata: metadataKeyValuePair
};
const interpolateRules = templatedRules( const interpolateRules = templatedRules(
{ {
identity: { identity: templateValue
id: userProjectPermission.userId,
username: userProjectPermission.username,
metadata: metadataKeyValuePair
}
}, },
{ data: false } { data: false }
); );
@@ -473,21 +477,21 @@ export const permissionServiceFactory = ({
const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges)); const rules = buildProjectPermissionRules(rolePermissions.concat(additionalPrivileges));
const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false }); const templatedRules = handlebars.compile(JSON.stringify(rules), { data: false });
const metadataKeyValuePair = escapeHandlebarsMissingMetadata( const metadataKeyValuePair = escapeHandlebarsMissingDict(
objectify( objectify(
identityProjectPermission.metadata, identityProjectPermission.metadata,
(i) => i.key, (i) => i.key,
(i) => i.value (i) => i.value
) )
); );
const templateValue = {
id: identityProjectPermission.identityId,
username: identityProjectPermission.username,
metadata: metadataKeyValuePair
};
const interpolateRules = templatedRules( const interpolateRules = templatedRules(
{ {
identity: { identity: templateValue
id: identityProjectPermission.identityId,
username: identityProjectPermission.username,
metadata: metadataKeyValuePair
}
}, },
{ data: false } { data: false }
); );