Skip to content

Commit 6af5589

Browse files
fix team permissions (stack-auth#1016)
<!-- Make sure you've read the CONTRIBUTING.md guidelines: https://github.com/stack-auth/stack-auth/blob/dev/CONTRIBUTING.md --> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Enhanced permission definition management system with improved handling for permission configurations, ensuring better system reliability and consistency. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: ArvindParekh <aruparekh@gmail.com>
1 parent e320385 commit 6af5589

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

apps/backend/prisma/seed.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable no-restricted-syntax */
22
import { usersCrudHandlers } from '@/app/api/latest/users/crud';
33
import { overrideEnvironmentConfigOverride } from '@/lib/config';
4-
import { grantTeamPermission, updatePermissionDefinition } from '@/lib/permissions';
4+
import { ensurePermissionDefinition, grantTeamPermission } from '@/lib/permissions';
55
import { createOrUpdateProjectWithLegacyConfig, getProject } from '@/lib/projects';
66
import { DEFAULT_BRANCH_ID, getSoleTenancyFromProjectBranch } from '@/lib/tenancies';
77
import { getPrismaClientForTenancy, globalPrismaClient } from '@/prisma-client';
@@ -203,30 +203,28 @@ export async function seed() {
203203
}
204204
});
205205

206-
await updatePermissionDefinition(
206+
await ensurePermissionDefinition(
207207
globalPrismaClient,
208208
internalPrisma,
209209
{
210-
oldId: "team_member",
210+
id: "team_member",
211211
scope: "team",
212212
tenancy: internalTenancy,
213213
data: {
214-
id: "team_member",
215214
description: "1",
216215
contained_permission_ids: ["$read_members"],
217216
}
218217
}
219218
);
220219
const updatedInternalTenancy = await getSoleTenancyFromProjectBranch("internal", DEFAULT_BRANCH_ID);
221-
await updatePermissionDefinition(
220+
await ensurePermissionDefinition(
222221
globalPrismaClient,
223222
internalPrisma,
224223
{
225-
oldId: "team_admin",
224+
id: "team_admin",
226225
scope: "team",
227226
tenancy: updatedInternalTenancy,
228227
data: {
229-
id: "team_admin",
230228
description: "2",
231229
contained_permission_ids: ["$read_members", "$remove_members", "$update_team"],
232230
}

apps/backend/src/lib/permissions.tsx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,45 @@ export async function updatePermissionDefinition(
334334
};
335335
}
336336

337+
export async function ensurePermissionDefinition(
338+
globalTx: PrismaTransaction,
339+
sourceOfTruthTx: PrismaTransaction,
340+
options: {
341+
scope: "team" | "project",
342+
tenancy: Tenancy,
343+
id: string,
344+
data: {
345+
description?: string,
346+
contained_permission_ids?: string[],
347+
},
348+
}
349+
) {
350+
const existingPermission = getOrUndefined(options.tenancy.config.rbac.permissions, options.id);
351+
352+
if (existingPermission) {
353+
return await updatePermissionDefinition(globalTx, sourceOfTruthTx, {
354+
scope: options.scope,
355+
tenancy: options.tenancy,
356+
oldId: options.id,
357+
data: {
358+
id: options.id,
359+
description: options.data.description,
360+
contained_permission_ids: options.data.contained_permission_ids,
361+
},
362+
});
363+
} else {
364+
return await createPermissionDefinition(globalTx, {
365+
scope: options.scope,
366+
tenancy: options.tenancy,
367+
data: {
368+
id: options.id,
369+
description: options.data.description,
370+
contained_permission_ids: options.data.contained_permission_ids,
371+
},
372+
});
373+
}
374+
}
375+
337376
export async function deletePermissionDefinition(
338377
globalTx: PrismaTransaction,
339378
sourceOfTruthTx: PrismaTransaction,

0 commit comments

Comments
 (0)