diff --git a/packages/features/auth/lib/next-auth-options.ts b/packages/features/auth/lib/next-auth-options.ts index 7fd3ffbcaf..3c7ab80d80 100644 --- a/packages/features/auth/lib/next-auth-options.ts +++ b/packages/features/auth/lib/next-auth-options.ts @@ -387,7 +387,7 @@ export const AUTH_OPTIONS: AuthOptions = { if (trigger === "update") { return { ...token, - locale: session?.locale ?? token.locale, + locale: session?.locale ?? token.locale ?? "en", name: session?.name ?? token.name, username: session?.username ?? token.username, email: session?.email ?? token.email, diff --git a/packages/trpc/server/routers/viewer/organizations/update.handler.ts b/packages/trpc/server/routers/viewer/organizations/update.handler.ts index ec8d1fad92..85cf437a47 100644 --- a/packages/trpc/server/routers/viewer/organizations/update.handler.ts +++ b/packages/trpc/server/routers/viewer/organizations/update.handler.ts @@ -24,11 +24,12 @@ export const updateHandler = async ({ ctx, input }: UpdateOptions) => { // A user can only have one org so we pass in their currentOrgId here const currentOrgId = ctx.user?.organization?.id || input.orgId; - if (!currentOrgId || ctx.user.role !== UserPermissionRole.ADMIN) - throw new TRPCError({ code: "UNAUTHORIZED" }); + const isUserOrganizationAdmin = currentOrgId && (await isOrganisationAdmin(ctx.user?.id, currentOrgId)); + const isUserRoleAdmin = ctx.user.role === UserPermissionRole.ADMIN; - if (!(await isOrganisationAdmin(ctx.user?.id, currentOrgId)) || ctx.user.role !== UserPermissionRole.ADMIN) - throw new TRPCError({ code: "UNAUTHORIZED" }); + const isUserAuthorizedToUpdate = !!(isUserOrganizationAdmin || isUserRoleAdmin); + + if (!currentOrgId || !isUserAuthorizedToUpdate) throw new TRPCError({ code: "UNAUTHORIZED" }); if (input.slug) { const userConflict = await prisma.team.findMany({