1
1
import { Prisma } from "@prisma/client" ;
2
2
import { Config , getInvalidConfigReason , normalize , override } from "@stackframe/stack-shared/dist/config/format" ;
3
- import { BranchConfigOverride , BranchConfigOverrideOverride , BranchIncompleteConfig , BranchRenderedConfig , EnvironmentConfigOverride , EnvironmentConfigOverrideOverride , EnvironmentIncompleteConfig , EnvironmentRenderedConfig , OrganizationConfigOverride , OrganizationConfigOverrideOverride , OrganizationIncompleteConfig , OrganizationRenderedConfig , ProjectConfigOverride , ProjectConfigOverrideOverride , ProjectIncompleteConfig , ProjectRenderedConfig , applyBranchDefaults , applyEnvironmentDefaults , applyOrganizationDefaults , applyProjectDefaults , assertNoConfigOverrideErrors , branchConfigSchema , environmentConfigSchema , getConfigOverrideErrors , getIncompleteConfigWarnings , migrateConfigOverride , organizationConfigSchema , projectConfigSchema , sanitizeBranchConfig , sanitizeEnvironmentConfig , sanitizeOrganizationConfig , sanitizeProjectConfig } from "@stackframe/stack-shared/dist/config/schema" ;
3
+ import { BranchConfigOverride , BranchConfigOverrideOverride , BranchIncompleteConfig , BranchRenderedConfig , CompleteConfig , EnvironmentConfigOverride , EnvironmentConfigOverrideOverride , EnvironmentIncompleteConfig , EnvironmentRenderedConfig , OrganizationConfigOverride , OrganizationConfigOverrideOverride , OrganizationIncompleteConfig , ProjectConfigOverride , ProjectConfigOverrideOverride , ProjectIncompleteConfig , ProjectRenderedConfig , applyBranchDefaults , applyEnvironmentDefaults , applyOrganizationDefaults , applyProjectDefaults , assertNoConfigOverrideErrors , branchConfigSchema , environmentConfigSchema , getConfigOverrideErrors , getIncompleteConfigWarnings , migrateConfigOverride , organizationConfigSchema , projectConfigSchema , sanitizeBranchConfig , sanitizeEnvironmentConfig , sanitizeOrganizationConfig , sanitizeProjectConfig } from "@stackframe/stack-shared/dist/config/schema" ;
4
4
import { ProjectsCrud } from "@stackframe/stack-shared/dist/interface/crud/projects" ;
5
5
import { yupBoolean , yupMixed , yupObject , yupRecord , yupString , yupUnion } from "@stackframe/stack-shared/dist/schema-fields" ;
6
6
import { isTruthy } from "@stackframe/stack-shared/dist/utils/booleans" ;
@@ -9,7 +9,8 @@ import { filterUndefined, typedEntries } from "@stackframe/stack-shared/dist/uti
9
9
import { Result } from "@stackframe/stack-shared/dist/utils/results" ;
10
10
import { deindent , stringCompare } from "@stackframe/stack-shared/dist/utils/strings" ;
11
11
import * as yup from "yup" ;
12
- import { PrismaClientTransaction , RawQuery , globalPrismaClient , rawQuery } from "../prisma-client" ;
12
+ import { RawQuery , globalPrismaClient , rawQuery } from "../prisma-client" ;
13
+ import { listPermissionDefinitionsFromConfig } from "./permissions" ;
13
14
import { DEFAULT_BRANCH_ID } from "./tenancies" ;
14
15
15
16
type ProjectOptions = { projectId : string } ;
@@ -46,7 +47,7 @@ export function getRenderedEnvironmentConfigQuery(options: EnvironmentOptions):
46
47
) ;
47
48
}
48
49
49
- export function getRenderedOrganizationConfigQuery ( options : OrganizationOptions ) : RawQuery < Promise < OrganizationRenderedConfig > > {
50
+ export function getRenderedOrganizationConfigQuery ( options : OrganizationOptions ) : RawQuery < Promise < CompleteConfig > > {
50
51
return RawQuery . then (
51
52
getIncompleteOrganizationConfigQuery ( options ) ,
52
53
async ( incompleteConfig ) => await sanitizeOrganizationConfig ( normalize ( applyOrganizationDefaults ( await incompleteConfig ) , { onDotIntoNonObject : "ignore" } ) as any ) ,
@@ -469,7 +470,7 @@ import.meta.vitest?.test('_validateConfigOverrideSchemaImpl(...)', async ({ expe
469
470
// ---------------------------------------------------------------------------------------------------------------------
470
471
471
472
// C -> A
472
- export const renderedOrganizationConfigToProjectCrud = ( renderedConfig : OrganizationRenderedConfig ) : ProjectsCrud [ "Admin" ] [ "Read" ] [ 'config' ] => {
473
+ export const renderedOrganizationConfigToProjectCrud = ( renderedConfig : CompleteConfig ) : ProjectsCrud [ "Admin" ] [ "Read" ] [ 'config' ] => {
473
474
const oauthProviders = typedEntries ( renderedConfig . auth . oauth . providers )
474
475
. map ( ( [ oauthProviderId , oauthProvider ] ) => {
475
476
if ( ! oauthProvider . type ) {
@@ -491,6 +492,15 @@ export const renderedOrganizationConfigToProjectCrud = (renderedConfig: Organiza
491
492
. filter ( isTruthy )
492
493
. sort ( ( a , b ) => stringCompare ( a . id , b . id ) ) ;
493
494
495
+ const teamPermissionDefinitions = listPermissionDefinitionsFromConfig ( {
496
+ config : renderedConfig ,
497
+ scope : "team" ,
498
+ } ) ;
499
+ const projectPermissionDefinitions = listPermissionDefinitionsFromConfig ( {
500
+ config : renderedConfig ,
501
+ scope : "project" ,
502
+ } ) ;
503
+
494
504
return {
495
505
allow_localhost : renderedConfig . domains . allowLocalhost ,
496
506
client_team_creation_enabled : renderedConfig . teams . allowClientTeamCreation ,
@@ -527,15 +537,15 @@ export const renderedOrganizationConfigToProjectCrud = (renderedConfig: Organiza
527
537
email_theme : renderedConfig . emails . selectedThemeId ,
528
538
529
539
team_creator_default_permissions : typedEntries ( renderedConfig . rbac . defaultPermissions . teamCreator )
530
- . filter ( ( [ _ , perm ] ) => perm )
540
+ . filter ( ( [ id , perm ] ) => perm && teamPermissionDefinitions . some ( ( p ) => p . id === id ) )
531
541
. map ( ( [ id , perm ] ) => ( { id } ) )
532
542
. sort ( ( a , b ) => stringCompare ( a . id , b . id ) ) ,
533
543
team_member_default_permissions : typedEntries ( renderedConfig . rbac . defaultPermissions . teamMember )
534
- . filter ( ( [ _ , perm ] ) => perm )
544
+ . filter ( ( [ id , perm ] ) => perm && teamPermissionDefinitions . some ( ( p ) => p . id === id ) )
535
545
. map ( ( [ id , perm ] ) => ( { id } ) )
536
546
. sort ( ( a , b ) => stringCompare ( a . id , b . id ) ) ,
537
547
user_default_permissions : typedEntries ( renderedConfig . rbac . defaultPermissions . signUp )
538
- . filter ( ( [ _ , perm ] ) => perm )
548
+ . filter ( ( [ id , perm ] ) => perm && projectPermissionDefinitions . some ( ( p ) => p . id === id ) )
539
549
. map ( ( [ id , perm ] ) => ( { id } ) )
540
550
. sort ( ( a , b ) => stringCompare ( a . id , b . id ) ) ,
541
551
0 commit comments