Fix getProjectMembership to work with additional privileges

This commit is contained in:
Tuan Dang
2024-04-04 11:20:39 -07:00
parent 51819e57d1
commit 51f220ba2c
2 changed files with 44 additions and 4 deletions

View File

@@ -129,7 +129,7 @@ export const permissionDALFactory = (db: TDbClient) => {
); );
const permission = sqlNestRelationships({ const permission = sqlNestRelationships({
data: docs.concat(groupDocs), data: docs,
key: "projectId", key: "projectId",
parentMapper: ({ orgId, orgAuthEnforced, membershipId, membershipCreatedAt, membershipUpdatedAt, role }) => ({ parentMapper: ({ orgId, orgAuthEnforced, membershipId, membershipCreatedAt, membershipUpdatedAt, role }) => ({
orgId, orgId,
@@ -175,7 +175,43 @@ export const permissionDALFactory = (db: TDbClient) => {
] ]
}); });
const groupRoles = groupDocs.length
? sqlNestRelationships({
data: groupDocs,
key: "projectId",
parentMapper: ({
orgId,
orgAuthEnforced,
membershipId,
membershipCreatedAt,
membershipUpdatedAt,
role
}) => ({
orgId,
orgAuthEnforced,
userId,
role,
id: membershipId,
projectId,
createdAt: membershipCreatedAt,
updatedAt: membershipUpdatedAt
}),
childrenMapper: [
{
key: "id",
label: "roles" as const,
mapper: (data) =>
ProjectUserMembershipRolesSchema.extend({
permissions: z.unknown(),
customRoleSlug: z.string().optional().nullable()
}).parse(data)
}
]
})?.[0]?.roles
: [];
if (!permission?.[0]) return undefined; if (!permission?.[0]) return undefined;
// when introducting cron mode change it here // when introducting cron mode change it here
const activeRoles = permission?.[0]?.roles?.filter( const activeRoles = permission?.[0]?.roles?.filter(
({ isTemporary, temporaryAccessEndTime }) => ({ isTemporary, temporaryAccessEndTime }) =>
@@ -187,7 +223,11 @@ export const permissionDALFactory = (db: TDbClient) => {
!isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime) !isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime)
); );
return { ...permission[0], roles: activeRoles, additionalPrivileges: activeAdditionalPrivileges }; return {
...permission[0],
roles: [...activeRoles, ...groupRoles],
additionalPrivileges: activeAdditionalPrivileges
};
} catch (error) { } catch (error) {
throw new DatabaseError({ error, name: "GetProjectPermission" }); throw new DatabaseError({ error, name: "GetProjectPermission" });
} }

View File

@@ -26,8 +26,8 @@ import {
import { useWorkspace } from "@app/context"; import { useWorkspace } from "@app/context";
import { usePopUp } from "@app/hooks"; import { usePopUp } from "@app/hooks";
import { useGetProjectRoles, useUpdateGroupWorkspaceRole } from "@app/hooks/api"; import { useGetProjectRoles, useUpdateGroupWorkspaceRole } from "@app/hooks/api";
import { TGroupMembership } from "@app/hooks/api/groups/types";
import { ProjectMembershipRole } from "@app/hooks/api/roles/types"; import { ProjectMembershipRole } from "@app/hooks/api/roles/types";
import { TWorkspaceUser } from "@app/hooks/api/types";
import { ProjectUserMembershipTemporaryMode } from "@app/hooks/api/workspace/types"; import { ProjectUserMembershipTemporaryMode } from "@app/hooks/api/workspace/types";
import { groupBy } from "@app/lib/fn/array"; import { groupBy } from "@app/lib/fn/array";
@@ -196,7 +196,7 @@ type TForm = z.infer<typeof formSchema>;
export type TMemberRolesProp = { export type TMemberRolesProp = {
disableEdit?: boolean; disableEdit?: boolean;
groupSlug: string; groupSlug: string;
roles: TWorkspaceUser["roles"]; roles: TGroupMembership["roles"];
}; };
const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2; const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2;