@@ -768,4 +768,56 @@ describe('Cross-model field comparison', () => {
768768 await prisma . user . update ( { where : { id : 1 } , data : { age : 21 } } ) ;
769769 await expect ( db . user . update ( { where : { id : 1 } , data : { age : 25 } } ) ) . toResolveTruthy ( ) ;
770770 } ) ;
771+
772+ it ( 'with auth' , async ( ) => {
773+ const { prisma, enhance } = await loadSchema (
774+ `
775+ model User {
776+ id Int @id @default(autoincrement())
777+ permissions Permission[]
778+ @@allow('all', true)
779+ }
780+
781+ model Permission {
782+ id Int @id @default(autoincrement())
783+ user User @relation(fields: [userId], references: [id])
784+ userId Int
785+ model String
786+ level Int
787+ @@allow('all', true)
788+ }
789+
790+ model Post {
791+ id Int @id @default(autoincrement())
792+ title String
793+ permission PostPermission?
794+
795+ @@allow('read', true)
796+ @@allow("create", auth().permissions?[model == 'Post' && level == this.permission.level])
797+ }
798+
799+ model PostPermission {
800+ id Int @id @default(autoincrement())
801+ post Post @relation(fields: [postId], references: [id])
802+ postId Int @unique
803+ level Int
804+ @@allow('all', true)
805+ }
806+ ` ,
807+ { preserveTsFiles : true }
808+ ) ;
809+
810+ await expect ( enhance ( ) . post . create ( { data : { title : 'P1' } } ) ) . toBeRejectedByPolicy ( ) ;
811+ await expect (
812+ enhance ( { id : 1 , permissions : [ { model : 'Foo' , level : 1 } ] } ) . post . create ( { data : { title : 'P1' } } )
813+ ) . toBeRejectedByPolicy ( ) ;
814+ await expect (
815+ enhance ( { id : 1 , permissions : [ { model : 'Post' , level : 1 } ] } ) . post . create ( { data : { title : 'P1' } } )
816+ ) . toBeRejectedByPolicy ( ) ;
817+ await expect (
818+ enhance ( { id : 1 , permissions : [ { model : 'Post' , level : 1 } ] } ) . post . create ( {
819+ data : { title : 'P1' , permission : { create : { level : 1 } } } ,
820+ } )
821+ ) . toResolveTruthy ( ) ;
822+ } ) ;
771823} ) ;
0 commit comments