mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-17 16:27:39 +00:00
feat: completed ap, org roles and project roles and project membership
This commit is contained in:
@@ -274,7 +274,7 @@ export const membershipUserServiceFactory = ({
|
||||
const existingMembership = await membershipUserDAL.findOne({
|
||||
scope: scopeData.scope,
|
||||
...scopeDatabaseFields,
|
||||
actorUserId: dto.selector.actorId
|
||||
actorUserId: dto.selector.userId
|
||||
});
|
||||
if (!existingMembership)
|
||||
throw new BadRequestError({
|
||||
@@ -338,31 +338,31 @@ export const membershipUserServiceFactory = ({
|
||||
},
|
||||
tx
|
||||
);
|
||||
await membershipRoleDAL.insertMany(roleDocs, tx);
|
||||
return doc;
|
||||
const insertedRoles = await membershipRoleDAL.insertMany(roleDocs, tx);
|
||||
return { ...doc, roles: insertedRoles };
|
||||
});
|
||||
|
||||
return { memberships: membershipDoc };
|
||||
return { membership: membershipDoc };
|
||||
};
|
||||
|
||||
const deleteMembership = async (dto: TDeleteMembershipUserDTO) => {
|
||||
const { scopeData } = dto;
|
||||
const factory = scopeFactory[scopeData.scope];
|
||||
|
||||
const { actorIdOfDeletor } = await factory.onDeleteMembershipUserGuard(dto);
|
||||
await factory.onDeleteMembershipUserGuard(dto);
|
||||
|
||||
const scopeDatabaseFields = factory.getScopeDatabaseFields(dto.scopeData);
|
||||
const existingMembership = await membershipUserDAL.findOne({
|
||||
scope: scopeData.scope,
|
||||
...scopeDatabaseFields,
|
||||
actorUserId: dto.selector.actorId
|
||||
actorUserId: dto.selector.userId
|
||||
});
|
||||
if (!existingMembership)
|
||||
throw new BadRequestError({
|
||||
message: "User doesn't have membership"
|
||||
});
|
||||
|
||||
if (existingMembership.actorUserId === actorIdOfDeletor)
|
||||
if (existingMembership.actorUserId === dto.permission.id)
|
||||
throw new BadRequestError({
|
||||
message: "You can delete you own membership"
|
||||
});
|
||||
@@ -403,7 +403,7 @@ export const membershipUserServiceFactory = ({
|
||||
await factory.onGetMembershipUserByUserIdGuard(dto);
|
||||
const membership = await membershipUserDAL.getUserById({
|
||||
scopeData,
|
||||
userId: selector.actorId
|
||||
userId: selector.userId
|
||||
});
|
||||
if (!membership) throw new NotFoundError({ message: `User membership not found` });
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ export interface TMembershipUserScopeFactory {
|
||||
onCreateMembershipComplete: (arg: { id: string; email: string }[]) => Promise<void>;
|
||||
|
||||
onUpdateMembershipUserGuard: (arg: TUpdateMembershipUserDTO) => Promise<void>;
|
||||
onDeleteMembershipUserGuard: (arg: TDeleteMembershipUserDTO) => Promise<{ actorIdOfDeletor: string }>;
|
||||
onDeleteMembershipUserGuard: (arg: TDeleteMembershipUserDTO) => Promise<void>;
|
||||
onListMembershipUserGuard: (arg: TListMembershipUserDTO) => Promise<void>;
|
||||
onGetMembershipUserByUserIdGuard: (arg: TGetMembershipUserByUserIdDTO) => Promise<void>;
|
||||
getScopeField: (scope: AccessScopeData) => { key: "orgId" | "namespaceId" | "projectId"; value: string };
|
||||
@@ -37,7 +37,7 @@ export type TUpdateMembershipUserDTO = {
|
||||
permission: OrgServiceActor;
|
||||
scopeData: AccessScopeData;
|
||||
selector: {
|
||||
actorId: string;
|
||||
userId: string;
|
||||
};
|
||||
data: {
|
||||
isActive?: boolean;
|
||||
@@ -67,7 +67,7 @@ export type TDeleteMembershipUserDTO = {
|
||||
permission: OrgServiceActor;
|
||||
scopeData: AccessScopeData;
|
||||
selector: {
|
||||
actorId: string;
|
||||
userId: string;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -75,6 +75,6 @@ export type TGetMembershipUserByUserIdDTO = {
|
||||
permission: OrgServiceActor;
|
||||
scopeData: AccessScopeData;
|
||||
selector: {
|
||||
actorId: string;
|
||||
userId: string;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -63,4 +63,4 @@ export const newNamespaceMembershipUserFactory = (
|
||||
getScopeDatabaseFields,
|
||||
isCustomRole
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -67,7 +67,6 @@ export const newOrgMembershipUserFactory = ({
|
||||
dto.permission.orgId
|
||||
);
|
||||
ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Delete, OrgPermissionSubjects.Member);
|
||||
return { actorIdOfDeletor: dto.permission.id };
|
||||
};
|
||||
|
||||
const onListMembershipUserGuard: TMembershipUserScopeFactory["onListMembershipUserGuard"] = async (dto) => {
|
||||
|
||||
@@ -134,7 +134,6 @@ export const newProjectMembershipUserFactory = ({
|
||||
actorOrgId: dto.permission.orgId
|
||||
});
|
||||
ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionMemberActions.Delete, ProjectPermissionSub.Member);
|
||||
return { actorIdOfDeletor: dto.permission.id };
|
||||
};
|
||||
|
||||
const onListMembershipUserGuard: TMembershipUserScopeFactory["onListMembershipUserGuard"] = async (dto) => {
|
||||
|
||||
Reference in New Issue
Block a user