diff --git a/backend/src/ee/services/group/user-group-membership-dal.ts b/backend/src/ee/services/group/user-group-membership-dal.ts index 31df13585..f3e0a34c6 100644 --- a/backend/src/ee/services/group/user-group-membership-dal.ts +++ b/backend/src/ee/services/group/user-group-membership-dal.ts @@ -189,7 +189,7 @@ export const userGroupMembershipDALFactory = (db: TDbClient) => { const docs = await db .replicaNode()(TableName.UserGroupMembership) .join(TableName.Groups, `${TableName.UserGroupMembership}.groupId`, `${TableName.Groups}.id`) - .join(TableName.Membership, `${TableName.UserGroupMembership}.userId`, `${TableName.Membership}.actorGroupId`) + .join(TableName.Membership, `${TableName.UserGroupMembership}.userId`, `${TableName.Membership}.actorUserId`) .join(TableName.Users, `${TableName.UserGroupMembership}.userId`, `${TableName.Users}.id`) .where(`${TableName.Groups}.id`, groupId) .where(`${TableName.Membership}.scope`, AccessScope.Organization) diff --git a/backend/src/ee/services/permission/permission-dal.ts b/backend/src/ee/services/permission/permission-dal.ts index 8ec768e90..5fb36cdee 100644 --- a/backend/src/ee/services/permission/permission-dal.ts +++ b/backend/src/ee/services/permission/permission-dal.ts @@ -5,7 +5,7 @@ import { TDbClient } from "@app/db"; import { AccessScope, AccessScopeData, - IdentityProjectMembershipRoleSchema, + MembershipRolesSchema, MembershipsSchema, TableName, TMemberships, @@ -95,7 +95,6 @@ export interface TPermissionDALFactory { updatedAt: Date; isTemporary: boolean; role: string; - projectMembershipId: string; temporaryRange?: string | null | undefined; permissions?: unknown; customRoleId?: string | null | undefined; @@ -382,7 +381,7 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => { } }) .select( - db.ref("id").withSchema(TableName.GroupProjectMembership).as("membershipId"), + db.ref("id").withSchema(TableName.Membership).as("membershipId"), db.ref("id").withSchema(TableName.Groups).as("groupId"), db.ref("name").withSchema(TableName.Groups).as("groupName"), db.ref("slug").withSchema("groupCustomRoles").as("groupProjectMembershipRoleCustomRoleSlug"), @@ -474,6 +473,7 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => { const docs = await db .replicaNode()(TableName.Users) .where("isGhost", "=", false) + .join(TableName.Membership, `${TableName.Users}.id`, `${TableName.Membership}.actorUserId`) .join(TableName.MembershipRole, `${TableName.Membership}.id`, `${TableName.MembershipRole}.membershipId`) .leftJoin(TableName.Role, `${TableName.MembershipRole}.customRoleId`, `${TableName.Role}.id`) .leftJoin(TableName.AdditionalPrivilege, (qb) => { @@ -661,12 +661,14 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => { `${TableName.AdditionalPrivilege}.orgId` ); }) + .join(TableName.Identity, `${TableName.Identity}.id`, `${TableName.Membership}.actorIdentityId`) .leftJoin(TableName.IdentityMetadata, (queryBuilder) => { void queryBuilder .on(`${TableName.Membership}.actorIdentityId`, `${TableName.IdentityMetadata}.identityId`) .andOn(`${TableName.Membership}.scopeOrgId`, `${TableName.IdentityMetadata}.orgId`); }) .where(`${TableName.Membership}.scopeOrgId`, orgId) + .whereNotNull(`${TableName.Membership}.actorIdentityId`) .where(`${TableName.Membership}.scope`, AccessScope.Project) .where(`${TableName.Membership}.scopeProjectId`, projectId) .select(selectAllTableCols(TableName.MembershipRole)) @@ -715,7 +717,7 @@ export const permissionDALFactory = (db: TDbClient): TPermissionDALFactory => { key: "id", label: "roles" as const, mapper: (data) => - IdentityProjectMembershipRoleSchema.extend({ + MembershipRolesSchema.extend({ permissions: z.unknown(), customRoleSlug: z.string().optional().nullable() }).parse(data) diff --git a/backend/src/server/routes/v1/identity-project-router.ts b/backend/src/server/routes/v1/identity-project-router.ts index 986a8f8d5..fd39c7efe 100644 --- a/backend/src/server/routes/v1/identity-project-router.ts +++ b/backend/src/server/routes/v1/identity-project-router.ts @@ -383,7 +383,6 @@ export const registerIdentityProjectRouter = async (server: FastifyZodProvider) } }); - // TODO(simp): look into how to handle projects server.route({ method: "GET", url: "/identity-memberships/:identityMembershipId", diff --git a/backend/src/services/convertor/convertor-types.ts b/backend/src/services/convertor/convertor-types.ts deleted file mode 100644 index e69de29bb..000000000 diff --git a/backend/src/services/membership-group/membership-group-service.ts b/backend/src/services/membership-group/membership-group-service.ts index a861dc984..ec1d1efac 100644 --- a/backend/src/services/membership-group/membership-group-service.ts +++ b/backend/src/services/membership-group/membership-group-service.ts @@ -265,7 +265,7 @@ export const membershipGroupServiceFactory = ({ if (existingMembership.actorGroupId === dto.permission.id) throw new BadRequestError({ - message: "You can't delete you own membership" + message: "You can't delete your own membership" }); const membershipDoc = await membershipGroupDAL.transaction(async (tx) => { diff --git a/backend/src/services/membership-group/org/org-membership-group-factory.ts b/backend/src/services/membership-group/org/org-membership-group-factory.ts index edc889851..fe6030c8e 100644 --- a/backend/src/services/membership-group/org/org-membership-group-factory.ts +++ b/backend/src/services/membership-group/org/org-membership-group-factory.ts @@ -40,7 +40,7 @@ export const newOrgMembershipGroupFactory = ({ const onCreateMembershipGroupGuard: TMembershipGroupScopeFactory["onCreateMembershipGroupGuard"] = async () => { throw new BadRequestError({ - message: "Organizatin membership cannot be created for groups" + message: "Organization membership cannot be created for groups" }); }; @@ -84,7 +84,7 @@ export const newOrgMembershipGroupFactory = ({ const onDeleteMembershipGroupGuard: TMembershipGroupScopeFactory["onDeleteMembershipGroupGuard"] = async () => { throw new BadRequestError({ - message: "Organizatin membership cannot be created for organization scoped group" + message: "Organization membership cannot be created for organization scoped group" }); }; diff --git a/backend/src/services/membership-identity/membership-identity-dal.ts b/backend/src/services/membership-identity/membership-identity-dal.ts index b51c04de4..3f895f82a 100644 --- a/backend/src/services/membership-identity/membership-identity-dal.ts +++ b/backend/src/services/membership-identity/membership-identity-dal.ts @@ -41,7 +41,7 @@ export const membershipIdentityDALFactory = (db: TDbClient) => { .leftJoin(TableName.Role, `${TableName.MembershipRole}.customRoleId`, `${TableName.Role}.id`) .leftJoin(TableName.IdentityMetadata, (queryBuilder) => { void queryBuilder - .on(`${TableName.Membership}.actorIdentityId`, `${TableName.IdentityMetadata}.userId`) + .on(`${TableName.Membership}.actorIdentityId`, `${TableName.IdentityMetadata}.identityId`) .andOn(`${TableName.Membership}.scopeOrgId`, `${TableName.IdentityMetadata}.orgId`); }) .where(`${TableName.Membership}.scopeOrgId`, scopeData.orgId) diff --git a/backend/src/services/membership-identity/membership-identity-service.ts b/backend/src/services/membership-identity/membership-identity-service.ts index 3be894c2c..562b751e0 100644 --- a/backend/src/services/membership-identity/membership-identity-service.ts +++ b/backend/src/services/membership-identity/membership-identity-service.ts @@ -272,7 +272,7 @@ export const membershipIdentityServiceFactory = ({ if (existingMembership.actorIdentityId === dto.permission.id) throw new BadRequestError({ - message: "You can't delete you own membership" + message: "You can't delete your own membership" }); const membershipDoc = await membershipIdentityDAL.transaction(async (tx) => { diff --git a/backend/src/services/membership-identity/org/org-membership-identity-factory.ts b/backend/src/services/membership-identity/org/org-membership-identity-factory.ts index 2fe00bd4b..ddd096b59 100644 --- a/backend/src/services/membership-identity/org/org-membership-identity-factory.ts +++ b/backend/src/services/membership-identity/org/org-membership-identity-factory.ts @@ -41,7 +41,7 @@ export const newOrgMembershipIdentityFactory = ({ const onCreateMembershipIdentityGuard: TMembershipIdentityScopeFactory["onCreateMembershipIdentityGuard"] = async () => { throw new BadRequestError({ - message: "Organizatin membership cannot be created for organization scoped identity" + message: "Organization membership cannot be created for organization scoped identity" }); }; @@ -88,7 +88,7 @@ export const newOrgMembershipIdentityFactory = ({ const onDeleteMembershipIdentityGuard: TMembershipIdentityScopeFactory["onDeleteMembershipIdentityGuard"] = async () => { throw new BadRequestError({ - message: "Organizatin membership cannot be created for organization scoped identity" + message: "Organization membership cannot be created for organization scoped identity" }); }; diff --git a/backend/src/services/membership-user/membership-user-service.ts b/backend/src/services/membership-user/membership-user-service.ts index 5fd2a2b25..937d79203 100644 --- a/backend/src/services/membership-user/membership-user-service.ts +++ b/backend/src/services/membership-user/membership-user-service.ts @@ -398,7 +398,7 @@ export const membershipUserServiceFactory = ({ if (existingMembership.actorUserId === dto.permission.id) throw new BadRequestError({ - message: "You can't delete you own membership" + message: "You can't delete your own membership" }); const membershipDoc = await membershipUserDAL.transaction(async (tx) => { diff --git a/backend/src/services/org/org-service.ts b/backend/src/services/org/org-service.ts index fd8f1f7cd..5b98b44b1 100644 --- a/backend/src/services/org/org-service.ts +++ b/backend/src/services/org/org-service.ts @@ -762,7 +762,7 @@ export const orgServiceFactory = ({ throw new NotFoundError({ message: `Organization membership with ID ${membershipId} not found` }); if (foundMembership.scopeOrgId !== orgId) throw new UnauthorizedError({ message: "Updated org member doesn't belong to the organization" }); - if (foundMembership.scopeOrgId === userId) + if (foundMembership.actorUserId === userId) throw new UnauthorizedError({ message: "Cannot update own organization membership" }); const isCustomRole = !Object.values(OrgMembershipRole).includes(role as OrgMembershipRole); diff --git a/backend/src/services/project-membership/project-membership-dal.ts b/backend/src/services/project-membership/project-membership-dal.ts index 0fd34886c..be1b94ba1 100644 --- a/backend/src/services/project-membership/project-membership-dal.ts +++ b/backend/src/services/project-membership/project-membership-dal.ts @@ -106,6 +106,8 @@ export const projectMembershipDALFactory = (db: TDbClient) => { firstName, lastName, id: userId, + // akhilmhdh: if we do user encryption based join this would fail for scim user who haven't logged in yet + // public key is not used anymore as well publicKey: "", isGhost, isOrgMembershipActive: isActive @@ -249,7 +251,17 @@ export const projectMembershipDALFactory = (db: TDbClient) => { id, userId, projectId, - user: { email, username, firstName, lastName, id: userId, isGhost, publicKey: "" }, + user: { + email, + username, + firstName, + lastName, + id: userId, + isGhost, + // akhilmhdh: if we do user encryption based join this would fail for scim user who haven't logged in yet + // public key is not used anymore as well + publicKey: "" + }, project: { id: projectId, name: projectName, diff --git a/backend/src/services/role/org/org-role-factory.ts b/backend/src/services/role/org/org-role-factory.ts index b2dd469c6..50ffa5e43 100644 --- a/backend/src/services/role/org/org-role-factory.ts +++ b/backend/src/services/role/org/org-role-factory.ts @@ -15,7 +15,6 @@ import { isCustomOrgRole } from "@app/services/org/org-role-fns"; import { TRoleScopeFactory } from "../role-types"; -// TODO(simp): missing external group checking type TOrgRoleScopeFactoryDep = { permissionService: Pick; externalGroupOrgRoleMappingDAL: Pick; diff --git a/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts b/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts index de8f930ed..579b19b19 100644 --- a/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts +++ b/backend/src/services/secret-v2-bridge/secret-v2-bridge-service.ts @@ -2395,8 +2395,8 @@ export const secretV2BridgeServiceFactory = ({ projectId: folder.projectId, secretVersions: secretVersionsFilter, findOpt: { - offset, limit, + offset, sort: [["createdAt", "desc"]] } }); diff --git a/backend/src/services/secret-v2-bridge/secret-version-dal.ts b/backend/src/services/secret-v2-bridge/secret-version-dal.ts index 8892b8394..7d25dac86 100644 --- a/backend/src/services/secret-v2-bridge/secret-version-dal.ts +++ b/backend/src/services/secret-v2-bridge/secret-version-dal.ts @@ -221,7 +221,7 @@ export const secretVersionV2BridgeDALFactory = (db: TDbClient) => { }) .orWhere((qb) => { void qb.where(`${TableName.SecretVersionV2}.secretId`, secretId); - void qb.whereNull(`${TableName.Membership}.actorProjectId`); + void qb.whereNull(`${TableName.Membership}.scopeProjectId`); if (secretVersions?.length) void qb.whereIn(`${TableName.SecretVersionV2}.version`, secretVersions); }) .select( diff --git a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplatesTable.tsx b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplatesTable.tsx index 8733b3852..c9993aba8 100644 --- a/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplatesTable.tsx +++ b/frontend/src/pages/organization/AccessManagementPage/components/OrgIdentityTab/components/IdentitySection/IdentityAuthTemplatesTable.tsx @@ -272,7 +272,7 @@ export const IdentityAuthTemplatesTable = ({ handlePopUpOpen }: Props) => { /> )} {!subscription.machineIdentityAuthTemplates && ( - + )} {!isPending && templates.length === 0 && (