Adjusting role actions
This commit is contained in:
@@ -364,19 +364,77 @@ export const upsertWorkspaceMember = async ({
|
||||
return result.rows[0] ?? null;
|
||||
};
|
||||
|
||||
export const deleteWorkspaceMember = async (memberId: string, workspaceId: number) => {
|
||||
export const deleteWorkspaceMember = async ({
|
||||
memberId,
|
||||
workspaceId,
|
||||
requesterMemberId,
|
||||
requesterIsBillingOwner,
|
||||
}: {
|
||||
memberId: string;
|
||||
workspaceId: number;
|
||||
requesterMemberId: string;
|
||||
requesterIsBillingOwner: boolean;
|
||||
}) => {
|
||||
const result = await db.query<{ id: string }>(
|
||||
`DELETE FROM workspace_members
|
||||
WHERE id = $1
|
||||
AND workspace_id = $2
|
||||
AND role <> 'owner'
|
||||
AND (
|
||||
role <> 'owner'
|
||||
OR (
|
||||
$3 = TRUE
|
||||
AND id <> $4
|
||||
)
|
||||
)
|
||||
RETURNING id`,
|
||||
[memberId, workspaceId],
|
||||
[memberId, workspaceId, requesterIsBillingOwner, requesterMemberId],
|
||||
);
|
||||
|
||||
return Boolean(result.rowCount);
|
||||
};
|
||||
|
||||
export const updateWorkspaceMemberRole = async ({
|
||||
memberId,
|
||||
workspaceId,
|
||||
role,
|
||||
requesterMemberId,
|
||||
requesterIsBillingOwner,
|
||||
requesterRole,
|
||||
billingEmail,
|
||||
}: {
|
||||
memberId: string;
|
||||
workspaceId: number;
|
||||
role: WorkspaceMemberRow['role'];
|
||||
requesterMemberId: string;
|
||||
requesterIsBillingOwner: boolean;
|
||||
requesterRole: WorkspaceMemberRow['role'];
|
||||
billingEmail: string;
|
||||
}) => {
|
||||
const result = await db.query<WorkspaceMemberRow>(
|
||||
`UPDATE workspace_members
|
||||
SET role = $3
|
||||
WHERE id = $1
|
||||
AND workspace_id = $2
|
||||
AND (
|
||||
role <> 'owner'
|
||||
OR (
|
||||
id <> $5
|
||||
AND (
|
||||
$4 = TRUE
|
||||
OR (
|
||||
$7 = 'owner'
|
||||
AND LOWER(BTRIM(COALESCE(invite_email, email))) <> LOWER(BTRIM($6))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
RETURNING id, workspace_id, user_id, COALESCE(invite_email, email) AS invite_email, name, role, accepted_at::text, created_at`,
|
||||
[memberId, workspaceId, role, requesterIsBillingOwner, requesterMemberId, billingEmail, requesterRole],
|
||||
);
|
||||
|
||||
return result.rows[0] ?? null;
|
||||
};
|
||||
|
||||
export const listRescueWorkspacesForAdmin = async () => {
|
||||
const result = await db.query<
|
||||
WorkspaceRow & {
|
||||
|
||||
Reference in New Issue
Block a user