From 51f220ba2ce23ec3e854b4e8480df188bd1df412 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Thu, 4 Apr 2024 11:20:39 -0700 Subject: [PATCH] Fix getProjectMembership to work with additional privileges --- .../ee/services/permission/permission-dal.ts | 44 ++++++++++++++++++- .../components/GroupsSection/GroupRoles.tsx | 4 +- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/backend/src/ee/services/permission/permission-dal.ts b/backend/src/ee/services/permission/permission-dal.ts index 5d1cb7279..1c4c9c071 100644 --- a/backend/src/ee/services/permission/permission-dal.ts +++ b/backend/src/ee/services/permission/permission-dal.ts @@ -129,7 +129,7 @@ export const permissionDALFactory = (db: TDbClient) => { ); const permission = sqlNestRelationships({ - data: docs.concat(groupDocs), + data: docs, key: "projectId", parentMapper: ({ orgId, orgAuthEnforced, membershipId, membershipCreatedAt, membershipUpdatedAt, role }) => ({ 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; + // when introducting cron mode change it here const activeRoles = permission?.[0]?.roles?.filter( ({ isTemporary, temporaryAccessEndTime }) => @@ -187,7 +223,11 @@ export const permissionDALFactory = (db: TDbClient) => { !isTemporary || (isTemporary && temporaryAccessEndTime && new Date() < temporaryAccessEndTime) ); - return { ...permission[0], roles: activeRoles, additionalPrivileges: activeAdditionalPrivileges }; + return { + ...permission[0], + roles: [...activeRoles, ...groupRoles], + additionalPrivileges: activeAdditionalPrivileges + }; } catch (error) { throw new DatabaseError({ error, name: "GetProjectPermission" }); } diff --git a/frontend/src/views/Project/MembersPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx b/frontend/src/views/Project/MembersPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx index 1384c5819..83ea00ede 100644 --- a/frontend/src/views/Project/MembersPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx +++ b/frontend/src/views/Project/MembersPage/components/GroupsTab/components/GroupsSection/GroupRoles.tsx @@ -26,8 +26,8 @@ import { import { useWorkspace } from "@app/context"; import { usePopUp } from "@app/hooks"; import { useGetProjectRoles, useUpdateGroupWorkspaceRole } from "@app/hooks/api"; +import { TGroupMembership } from "@app/hooks/api/groups/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 { groupBy } from "@app/lib/fn/array"; @@ -196,7 +196,7 @@ type TForm = z.infer; export type TMemberRolesProp = { disableEdit?: boolean; groupSlug: string; - roles: TWorkspaceUser["roles"]; + roles: TGroupMembership["roles"]; }; const MAX_ROLES_TO_BE_SHOWN_IN_TABLE = 2;