@@ -27,6 +27,7 @@ describe('Policy: field-level policy', () => {
27
27
id Int @id @default(autoincrement())
28
28
x Int
29
29
y Int @allow('read', x > 0)
30
+ z Int @deny('read', x <= 0)
30
31
owner User @relation(fields: [ownerId], references: [id])
31
32
ownerId Int
32
33
@@ -40,92 +41,106 @@ describe('Policy: field-level policy', () => {
40
41
const db = enhance ( ) ;
41
42
let r ;
42
43
43
- // y is unreadable
44
+ // y and x are unreadable
44
45
45
46
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 } ,
47
48
} ) ;
48
49
expect ( r . x ) . toEqual ( 0 ) ;
49
50
expect ( r . y ) . toBeUndefined ( ) ;
51
+ expect ( r . z ) . toBeUndefined ( ) ;
50
52
51
53
r = await db . model . findUnique ( { where : { id : 1 } } ) ;
52
54
expect ( r . y ) . toBeUndefined ( ) ;
55
+ expect ( r . z ) . toBeUndefined ( ) ;
53
56
54
57
r = await db . user . findUnique ( { where : { id : 1 } , select : { models : true } } ) ;
55
58
expect ( r . models [ 0 ] . y ) . toBeUndefined ( ) ;
59
+ expect ( r . models [ 0 ] . z ) . toBeUndefined ( ) ;
56
60
57
61
r = await db . user . findUnique ( { where : { id : 1 } , select : { models : { select : { y : true } } } } ) ;
58
62
expect ( r . models [ 0 ] . y ) . toBeUndefined ( ) ;
63
+ expect ( r . models [ 0 ] . z ) . toBeUndefined ( ) ;
59
64
60
65
r = await db . user . findUnique ( { where : { id : 1 } } ) . models ( ) ;
61
66
expect ( r [ 0 ] . y ) . toBeUndefined ( ) ;
67
+ expect ( r [ 0 ] . z ) . toBeUndefined ( ) ;
62
68
63
69
r = await db . user . findUnique ( { where : { id : 1 } } ) . models ( { select : { y : true } } ) ;
64
70
expect ( r [ 0 ] . y ) . toBeUndefined ( ) ;
71
+ expect ( r [ 0 ] . z ) . toBeUndefined ( ) ;
65
72
66
73
r = await db . model . findUnique ( { select : { x : true } , where : { id : 1 } } ) ;
67
74
expect ( r . x ) . toEqual ( 0 ) ;
68
75
expect ( r . y ) . toBeUndefined ( ) ;
76
+ expect ( r . z ) . toBeUndefined ( ) ;
69
77
70
78
r = await db . model . findUnique ( { select : { y : true } , where : { id : 1 } } ) ;
71
79
expect ( r . x ) . toBeUndefined ( ) ;
72
80
expect ( r . y ) . toBeUndefined ( ) ;
81
+ expect ( r . z ) . toBeUndefined ( ) ;
73
82
74
83
r = await db . model . findUnique ( { select : { x : false , y : true } , where : { id : 1 } } ) ;
75
84
expect ( r . x ) . toBeUndefined ( ) ;
76
85
expect ( r . y ) . toBeUndefined ( ) ;
86
+ expect ( r . z ) . toBeUndefined ( ) ;
77
87
78
88
r = await db . model . findUnique ( { select : { x : true , y : true } , where : { id : 1 } } ) ;
79
89
expect ( r . x ) . toEqual ( 0 ) ;
80
90
expect ( r . y ) . toBeUndefined ( ) ;
91
+ expect ( r . z ) . toBeUndefined ( ) ;
81
92
82
93
r = await db . model . findUnique ( { include : { owner : true } , where : { id : 1 } } ) ;
83
94
expect ( r . x ) . toEqual ( 0 ) ;
84
95
expect ( r . owner ) . toBeTruthy ( ) ;
85
96
expect ( r . y ) . toBeUndefined ( ) ;
97
+ expect ( r . z ) . toBeUndefined ( ) ;
86
98
87
99
// y is readable
88
100
89
101
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 } ,
91
103
} ) ;
92
- expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 } ) ) ;
104
+ expect ( r ) . toEqual ( expect . objectContaining ( { x : 1 , y : 0 , z : 0 } ) ) ;
93
105
94
106
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 } ) ) ;
96
108
97
109
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 } ) ) ;
99
111
100
112
r = await db . user . findUnique ( {
101
113
where : { id : 1 } ,
102
- select : { models : { where : { id : 2 } , select : { y : true } } } ,
114
+ select : { models : { where : { id : 2 } , select : { y : true , z : true } } } ,
103
115
} ) ;
104
- expect ( r . models [ 0 ] ) . toEqual ( expect . objectContaining ( { y : 0 } ) ) ;
116
+ expect ( r . models [ 0 ] ) . toEqual ( expect . objectContaining ( { y : 0 , z : 0 } ) ) ;
105
117
106
118
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 } ) ) ;
108
120
109
121
r = await db . user . findUnique ( { where : { id : 1 } } ) . models ( { where : { id : 2 } , select : { y : true } } ) ;
110
122
expect ( r [ 0 ] ) . toEqual ( expect . objectContaining ( { y : 0 } ) ) ;
111
123
112
124
r = await db . model . findUnique ( { select : { x : true } , where : { id : 2 } } ) ;
113
125
expect ( r . x ) . toEqual ( 1 ) ;
114
126
expect ( r . y ) . toBeUndefined ( ) ;
127
+ expect ( r . z ) . toBeUndefined ( ) ;
115
128
116
129
r = await db . model . findUnique ( { select : { y : true } , where : { id : 2 } } ) ;
117
130
expect ( r . x ) . toBeUndefined ( ) ;
118
131
expect ( r . y ) . toEqual ( 0 ) ;
132
+ expect ( r . z ) . toBeUndefined ( ) ;
119
133
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 } } ) ;
121
135
expect ( r . x ) . toBeUndefined ( ) ;
122
136
expect ( r . y ) . toEqual ( 0 ) ;
137
+ expect ( r . z ) . toEqual ( 0 ) ;
123
138
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 } ) ) ;
126
141
127
142
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 } ) ) ;
129
144
expect ( r . owner ) . toBeTruthy ( ) ;
130
145
} ) ;
131
146
0 commit comments