@@ -27,6 +27,7 @@ describe('Policy: field-level policy', () => {
2727 id Int @id @default(autoincrement())
2828 x Int
2929 y Int @allow('read', x > 0)
30+ z Int @deny('read', x <= 0)
3031 owner User @relation(fields: [ownerId], references: [id])
3132 ownerId Int
3233
@@ -40,92 +41,106 @@ describe('Policy: field-level policy', () => {
4041 const db = enhance ( ) ;
4142 let r ;
4243
43- // y is unreadable
44+ // y and x are unreadable
4445
4546 r = await db . model . create ( {
46- data : { id : 1 , x : 0 , y : 0 , ownerId : 1 } ,
47+ data : { id : 1 , x : 0 , y : 0 , z : 0 , ownerId : 1 } ,
4748 } ) ;
4849 expect ( r . x ) . toEqual ( 0 ) ;
4950 expect ( r . y ) . toBeUndefined ( ) ;
51+ expect ( r . z ) . toBeUndefined ( ) ;
5052
5153 r = await db . model . findUnique ( { where : { id : 1 } } ) ;
5254 expect ( r . y ) . toBeUndefined ( ) ;
55+ expect ( r . z ) . toBeUndefined ( ) ;
5356
5457 r = await db . user . findUnique ( { where : { id : 1 } , select : { models : true } } ) ;
5558 expect ( r . models [ 0 ] . y ) . toBeUndefined ( ) ;
59+ expect ( r . models [ 0 ] . z ) . toBeUndefined ( ) ;
5660
5761 r = await db . user . findUnique ( { where : { id : 1 } , select : { models : { select : { y : true } } } } ) ;
5862 expect ( r . models [ 0 ] . y ) . toBeUndefined ( ) ;
63+ expect ( r . models [ 0 ] . z ) . toBeUndefined ( ) ;
5964
6065 r = await db . user . findUnique ( { where : { id : 1 } } ) . models ( ) ;
6166 expect ( r [ 0 ] . y ) . toBeUndefined ( ) ;
67+ expect ( r [ 0 ] . z ) . toBeUndefined ( ) ;
6268
6369 r = await db . user . findUnique ( { where : { id : 1 } } ) . models ( { select : { y : true } } ) ;
6470 expect ( r [ 0 ] . y ) . toBeUndefined ( ) ;
71+ expect ( r [ 0 ] . z ) . toBeUndefined ( ) ;
6572
6673 r = await db . model . findUnique ( { select : { x : true } , where : { id : 1 } } ) ;
6774 expect ( r . x ) . toEqual ( 0 ) ;
6875 expect ( r . y ) . toBeUndefined ( ) ;
76+ expect ( r . z ) . toBeUndefined ( ) ;
6977
7078 r = await db . model . findUnique ( { select : { y : true } , where : { id : 1 } } ) ;
7179 expect ( r . x ) . toBeUndefined ( ) ;
7280 expect ( r . y ) . toBeUndefined ( ) ;
81+ expect ( r . z ) . toBeUndefined ( ) ;
7382
7483 r = await db . model . findUnique ( { select : { x : false , y : true } , where : { id : 1 } } ) ;
7584 expect ( r . x ) . toBeUndefined ( ) ;
7685 expect ( r . y ) . toBeUndefined ( ) ;
86+ expect ( r . z ) . toBeUndefined ( ) ;
7787
7888 r = await db . model . findUnique ( { select : { x : true , y : true } , where : { id : 1 } } ) ;
7989 expect ( r . x ) . toEqual ( 0 ) ;
8090 expect ( r . y ) . toBeUndefined ( ) ;
91+ expect ( r . z ) . toBeUndefined ( ) ;
8192
8293 r = await db . model . findUnique ( { include : { owner : true } , where : { id : 1 } } ) ;
8394 expect ( r . x ) . toEqual ( 0 ) ;
8495 expect ( r . owner ) . toBeTruthy ( ) ;
8596 expect ( r . y ) . toBeUndefined ( ) ;
97+ expect ( r . z ) . toBeUndefined ( ) ;
8698
8799 // y is readable
88100
89101 r = await db . model . create ( {
90- data : { id : 2 , x : 1 , y : 0 , ownerId : 1 } ,
102+ data : { id : 2 , x : 1 , y : 0 , z : 0 , ownerId : 1 } ,
91103 } ) ;
92- expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 } ) ) ;
104+ expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 , z : 0 } ) ) ;
93105
94106 r = await db . model . findUnique ( { where : { id : 2 } } ) ;
95- expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 } ) ) ;
107+ expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 , z : 0 } ) ) ;
96108
97109 r = await db . user . findUnique ( { where : { id : 1 } , select : { models : { where : { id : 2 } } } } ) ;
98- expect ( r . models [ 0 ] ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 } ) ) ;
110+ expect ( r . models [ 0 ] ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 , z : 0 } ) ) ;
99111
100112 r = await db . user . findUnique ( {
101113 where : { id : 1 } ,
102- select : { models : { where : { id : 2 } , select : { y : true } } } ,
114+ select : { models : { where : { id : 2 } , select : { y : true , z : true } } } ,
103115 } ) ;
104- expect ( r . models [ 0 ] ) . toEqual ( expect . objectContaining ( { y : 0 } ) ) ;
116+ expect ( r . models [ 0 ] ) . toEqual ( expect . objectContaining ( { y : 0 , z : 0 } ) ) ;
105117
106118 r = await db . user . findUnique ( { where : { id : 1 } } ) . models ( { where : { id : 2 } } ) ;
107- expect ( r [ 0 ] ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 } ) ) ;
119+ expect ( r [ 0 ] ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 , z : 0 } ) ) ;
108120
109121 r = await db . user . findUnique ( { where : { id : 1 } } ) . models ( { where : { id : 2 } , select : { y : true } } ) ;
110122 expect ( r [ 0 ] ) . toEqual ( expect . objectContaining ( { y : 0 } ) ) ;
111123
112124 r = await db . model . findUnique ( { select : { x : true } , where : { id : 2 } } ) ;
113125 expect ( r . x ) . toEqual ( 1 ) ;
114126 expect ( r . y ) . toBeUndefined ( ) ;
127+ expect ( r . z ) . toBeUndefined ( ) ;
115128
116129 r = await db . model . findUnique ( { select : { y : true } , where : { id : 2 } } ) ;
117130 expect ( r . x ) . toBeUndefined ( ) ;
118131 expect ( r . y ) . toEqual ( 0 ) ;
132+ expect ( r . z ) . toBeUndefined ( ) ;
119133
120- r = await db . model . findUnique ( { select : { x : false , y : true } , where : { id : 2 } } ) ;
134+ r = await db . model . findUnique ( { select : { x : false , y : true , z : true } , where : { id : 2 } } ) ;
121135 expect ( r . x ) . toBeUndefined ( ) ;
122136 expect ( r . y ) . toEqual ( 0 ) ;
137+ expect ( r . z ) . toEqual ( 0 ) ;
123138
124- r = await db . model . findUnique ( { select : { x : true , y : true } , where : { id : 2 } } ) ;
125- expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 } ) ) ;
139+ r = await db . model . findUnique ( { select : { x : true , y : true , z : true } , where : { id : 2 } } ) ;
140+ expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 , z : 0 } ) ) ;
126141
127142 r = await db . model . findUnique ( { include : { owner : true } , where : { id : 2 } } ) ;
128- expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 } ) ) ;
143+ expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 , z : 0 } ) ) ;
129144 expect ( r . owner ) . toBeTruthy ( ) ;
130145 } ) ;
131146
0 commit comments