@@ -769,8 +769,8 @@ describe('Cross-model field comparison', () => {
769769        await  expect ( db . user . update ( {  where : {  id : 1  } ,  data : {  age : 25  }  } ) ) . toResolveTruthy ( ) ; 
770770    } ) ; 
771771
772-     it ( 'with auth' ,  async  ( )  =>  { 
773-         const  {  prisma ,   enhance }  =  await  loadSchema ( 
772+     it ( 'with auth case 1 ' ,  async  ( )  =>  { 
773+         const  {  enhance }  =  await  loadSchema ( 
774774            ` 
775775        model User { 
776776            id Int @id @default(autoincrement()) 
@@ -803,8 +803,7 @@ describe('Cross-model field comparison', () => {
803803            level Int 
804804            @@allow('all', true) 
805805        } 
806-         ` , 
807-             {  preserveTsFiles : true  } 
806+         ` 
808807        ) ; 
809808
810809        await  expect ( enhance ( ) . post . create ( {  data : {  title : 'P1'  }  } ) ) . toBeRejectedByPolicy ( ) ; 
@@ -820,4 +819,182 @@ describe('Cross-model field comparison', () => {
820819            } ) 
821820        ) . toResolveTruthy ( ) ; 
822821    } ) ; 
822+ 
823+     it ( 'with auth case 2' ,  async  ( )  =>  { 
824+         const  {  prisma,  enhance }  =  await  loadSchema ( 
825+             ` 
826+         model User { 
827+             id Int @id @default(autoincrement()) 
828+             teamMembership TeamMembership[] 
829+             @@allow('all', true) 
830+         } 
831+ 
832+         model Team { 
833+             id Int @id @default(autoincrement()) 
834+             permissions Permission[] 
835+             assets Asset[] 
836+             @@allow('all', true) 
837+         } 
838+ 
839+         model Asset { 
840+             id Int @id @default(autoincrement()) 
841+             name String 
842+             team Team @relation(fields: [teamId], references: [id]) 
843+             teamId Int 
844+             @@allow('all', auth().teamMembership?[role.permissions?[name == 'ManageTeam' && teamId == this.teamId]]) 
845+             @@allow('read', true) 
846+         } 
847+ 
848+         model TeamMembership { 
849+             id Int @id @default(autoincrement()) 
850+             role TeamRole? 
851+             user User @relation(fields: [userId], references: [id]) 
852+             userId Int 
853+             @@allow('all', true) 
854+         } 
855+ 
856+         model TeamRole { 
857+             id Int @id @default(autoincrement()) 
858+             permissions Permission[] 
859+             membership TeamMembership @relation(fields: [membershipId], references: [id]) 
860+             membershipId Int @unique 
861+             @@allow('all', true) 
862+         } 
863+ 
864+         model Permission { 
865+             id Int @id @default(autoincrement()) 
866+             name String 
867+             team Team @relation(fields: [teamId], references: [id]) 
868+             teamId Int 
869+             role TeamRole @relation(fields: [roleId], references: [id]) 
870+             roleId Int 
871+             @@allow('all', true) 
872+         } 
873+         ` 
874+         ) ; 
875+ 
876+         const  team1  =  await  prisma . team . create ( {  data : { }  } ) ; 
877+         const  team2  =  await  prisma . team . create ( {  data : { }  } ) ; 
878+ 
879+         const  user  =  await  prisma . user . create ( { 
880+             data : { 
881+                 teamMembership : { 
882+                     create : { 
883+                         role : { 
884+                             create : { 
885+                                 permissions : {  create : [ {  name : 'ManageTeam' ,  team : {  connect : {  id : team1 . id  }  }  } ]  } , 
886+                             } , 
887+                         } , 
888+                     } , 
889+                 } , 
890+             } , 
891+         } ) ; 
892+ 
893+         const  asset  =  await  prisma . asset . create ( { 
894+             data : {  name : 'Asset1' ,  team : {  connect : {  id : team1 . id  }  }  } , 
895+         } ) ; 
896+ 
897+         const  dbTeam1  =  enhance ( { 
898+             id : user . id , 
899+             teamMembership : [ {  role : {  permissions : [ {  name : 'ManageTeam' ,  teamId : team1 . id  } ]  }  } ] , 
900+         } ) ; 
901+         await  expect ( dbTeam1 . asset . update ( {  where : {  id : asset . id  } ,  data : {  name : 'Asset2'  }  } ) ) . toResolveTruthy ( ) ; 
902+ 
903+         const  dbTeam2  =  enhance ( { 
904+             id : user . id , 
905+             teamMembership : [ {  role : {  permissions : [ {  name : 'ManageTeam' ,  teamId : team2 . id  } ]  }  } ] , 
906+         } ) ; 
907+         await  expect ( 
908+             dbTeam2 . asset . update ( {  where : {  id : asset . id  } ,  data : {  name : 'Asset2'  }  } ) 
909+         ) . toBeRejectedByPolicy ( ) ; 
910+     } ) ; 
911+ 
912+     it ( 'with auth case 3' ,  async  ( )  =>  { 
913+         const  {  prisma,  enhance }  =  await  loadSchema ( 
914+             ` 
915+         model User { 
916+             id Int @id @default(autoincrement()) 
917+             teamMembership TeamMembership[] 
918+             @@allow('all', true) 
919+         } 
920+ 
921+         model Team { 
922+             id Int @id @default(autoincrement()) 
923+             permissions Permission[] 
924+             assets Asset[] 
925+             @@allow('all', true) 
926+         } 
927+ 
928+         model Asset { 
929+             id Int @id @default(autoincrement()) 
930+             name String 
931+             team Team @relation(fields: [teamId], references: [id]) 
932+             teamId Int 
933+             @@allow('all', auth().teamMembership?[role.permissions?[name == 'ManageTeam' && team == this.team]]) 
934+             @@allow('read', true) 
935+         } 
936+ 
937+         model TeamMembership { 
938+             id Int @id @default(autoincrement()) 
939+             role TeamRole? 
940+             user User @relation(fields: [userId], references: [id]) 
941+             userId Int 
942+             @@allow('all', true) 
943+         } 
944+ 
945+         model TeamRole { 
946+             id Int @id @default(autoincrement()) 
947+             permissions Permission[] 
948+             membership TeamMembership @relation(fields: [membershipId], references: [id]) 
949+             membershipId Int @unique 
950+             @@allow('all', true) 
951+         } 
952+ 
953+         model Permission { 
954+             id Int @id @default(autoincrement()) 
955+             name String 
956+             team Team @relation(fields: [teamId], references: [id]) 
957+             teamId Int 
958+             role TeamRole @relation(fields: [roleId], references: [id]) 
959+             roleId Int 
960+             @@allow('all', true) 
961+         } 
962+         ` 
963+         ) ; 
964+ 
965+         const  team1  =  await  prisma . team . create ( {  data : { }  } ) ; 
966+         const  team2  =  await  prisma . team . create ( {  data : { }  } ) ; 
967+ 
968+         const  user  =  await  prisma . user . create ( { 
969+             data : { 
970+                 teamMembership : { 
971+                     create : { 
972+                         role : { 
973+                             create : { 
974+                                 permissions : {  create : [ {  name : 'ManageTeam' ,  team : {  connect : {  id : team1 . id  }  }  } ]  } , 
975+                             } , 
976+                         } , 
977+                     } , 
978+                 } , 
979+             } , 
980+         } ) ; 
981+ 
982+         const  asset  =  await  prisma . asset . create ( { 
983+             data : {  name : 'Asset1' ,  team : {  connect : {  id : team1 . id  }  }  } , 
984+         } ) ; 
985+ 
986+         const  dbTeam1  =  enhance ( { 
987+             id : user . id , 
988+             teamMembership : [ {  role : {  permissions : [ {  name : 'ManageTeam' ,  team : {  id : team1 . id  }  } ]  }  } ] , 
989+         } ) ; 
990+         await  expect ( dbTeam1 . asset . update ( {  where : {  id : asset . id  } ,  data : {  name : 'Asset2'  }  } ) ) . toResolveTruthy ( ) ; 
991+ 
992+         const  dbTeam2  =  enhance ( { 
993+             id : user . id , 
994+             teamMembership : [ {  role : {  permissions : [ {  name : 'ManageTeam' ,  teamId : team2 . id  } ]  }  } ] , 
995+         } ) ; 
996+         await  expect ( 
997+             dbTeam2 . asset . update ( {  where : {  id : asset . id  } ,  data : {  name : 'Asset2'  }  } ) 
998+         ) . toBeRejectedByPolicy ( ) ; 
999+     } ) ; 
8231000} ) ; 
0 commit comments