@@ -4,7 +4,7 @@ import { CrudFailureReason } from '../../constants';
4
4
import { AuthUser , DbClientContract , PolicyOperationKind } from '../../types' ;
5
5
import { BatchResult , PrismaProxyHandler } from '../proxy' ;
6
6
import { ModelMeta , PolicyDef } from '../types' ;
7
- import { prismaClientValidationError } from '../utils' ;
7
+ import { formatObject , prismaClientValidationError } from '../utils' ;
8
8
import { Logger } from './logger' ;
9
9
import { PolicyUtil } from './policy-utils' ;
10
10
@@ -20,10 +20,11 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
20
20
private readonly policy : PolicyDef ,
21
21
private readonly modelMeta : ModelMeta ,
22
22
private readonly model : string ,
23
- private readonly user ?: AuthUser
23
+ private readonly user ?: AuthUser ,
24
+ private readonly logPrismaQuery ?: boolean
24
25
) {
25
26
this . logger = new Logger ( prisma ) ;
26
- this . utils = new PolicyUtil ( this . prisma , this . modelMeta , this . policy , this . user ) ;
27
+ this . utils = new PolicyUtil ( this . prisma , this . modelMeta , this . policy , this . user , this . logPrismaQuery ) ;
27
28
}
28
29
29
30
private get modelClient ( ) {
@@ -107,9 +108,12 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
107
108
108
109
// use a transaction to wrap the write so it can be reverted if the created
109
110
// entity fails access policies
110
- const result : any = await this . utils . processWrite ( this . model , 'create' , args , ( dbOps , writeArgs ) =>
111
- dbOps . create ( writeArgs )
112
- ) ;
111
+ const result : any = await this . utils . processWrite ( this . model , 'create' , args , ( dbOps , writeArgs ) => {
112
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
113
+ this . logger . info ( `[withPolicy] \`create\`: ${ formatObject ( writeArgs ) } ` ) ;
114
+ }
115
+ return dbOps . create ( writeArgs ) ;
116
+ } ) ;
113
117
114
118
const ids = this . utils . getEntityIds ( this . model , result ) ;
115
119
if ( Object . keys ( ids ) . length === 0 ) {
@@ -133,9 +137,12 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
133
137
134
138
// use a transaction to wrap the write so it can be reverted if any created
135
139
// entity fails access policies
136
- const result = await this . utils . processWrite ( this . model , 'create' , args , ( dbOps , writeArgs ) =>
137
- dbOps . createMany ( writeArgs , skipDuplicates )
138
- ) ;
140
+ const result = await this . utils . processWrite ( this . model , 'create' , args , ( dbOps , writeArgs ) => {
141
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
142
+ this . logger . info ( `[withPolicy] \`createMany\`: ${ formatObject ( writeArgs ) } ` ) ;
143
+ }
144
+ return dbOps . createMany ( writeArgs , skipDuplicates ) ;
145
+ } ) ;
139
146
140
147
return result as BatchResult ;
141
148
}
@@ -158,9 +165,12 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
158
165
159
166
// use a transaction to wrap the write so it can be reverted if any nested
160
167
// create fails access policies
161
- const result : any = await this . utils . processWrite ( this . model , 'update' , args , ( dbOps , writeArgs ) =>
162
- dbOps . update ( writeArgs )
163
- ) ;
168
+ const result : any = await this . utils . processWrite ( this . model , 'update' , args , ( dbOps , writeArgs ) => {
169
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
170
+ this . logger . info ( `[withPolicy] \`update\`: ${ formatObject ( writeArgs ) } ` ) ;
171
+ }
172
+ return dbOps . update ( writeArgs ) ;
173
+ } ) ;
164
174
165
175
const ids = this . utils . getEntityIds ( this . model , result ) ;
166
176
if ( Object . keys ( ids ) . length === 0 ) {
@@ -183,9 +193,12 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
183
193
184
194
// use a transaction to wrap the write so it can be reverted if any nested
185
195
// create fails access policies
186
- const result = await this . utils . processWrite ( this . model , 'updateMany' , args , ( dbOps , writeArgs ) =>
187
- dbOps . updateMany ( writeArgs )
188
- ) ;
196
+ const result = await this . utils . processWrite ( this . model , 'updateMany' , args , ( dbOps , writeArgs ) => {
197
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
198
+ this . logger . info ( `[withPolicy] \`updateMany\`: ${ formatObject ( writeArgs ) } ` ) ;
199
+ }
200
+ return dbOps . updateMany ( writeArgs ) ;
201
+ } ) ;
189
202
190
203
return result as BatchResult ;
191
204
}
@@ -212,9 +225,12 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
212
225
213
226
// use a transaction to wrap the write so it can be reverted if any nested
214
227
// create fails access policies
215
- const result : any = await this . utils . processWrite ( this . model , 'upsert' , args , ( dbOps , writeArgs ) =>
216
- dbOps . upsert ( writeArgs )
217
- ) ;
228
+ const result : any = await this . utils . processWrite ( this . model , 'upsert' , args , ( dbOps , writeArgs ) => {
229
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
230
+ this . logger . info ( `[withPolicy] \`upsert\`: ${ formatObject ( writeArgs ) } ` ) ;
231
+ }
232
+ return dbOps . upsert ( writeArgs ) ;
233
+ } ) ;
218
234
219
235
const ids = this . utils . getEntityIds ( this . model , result ) ;
220
236
if ( Object . keys ( ids ) . length === 0 ) {
@@ -248,6 +264,9 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
248
264
}
249
265
250
266
// conduct the deletion
267
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
268
+ this . logger . info ( `[withPolicy] \`delete\`:\n${ formatObject ( args ) } ` ) ;
269
+ }
251
270
await this . modelClient . delete ( args ) ;
252
271
253
272
if ( ! readResult ) {
@@ -270,6 +289,9 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
270
289
await this . utils . injectAuthGuard ( args , this . model , 'delete' ) ;
271
290
272
291
// conduct the deletion
292
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
293
+ this . logger . info ( `[withPolicy] \`deleteMany\`:\n${ formatObject ( args ) } ` ) ;
294
+ }
273
295
return this . modelClient . deleteMany ( args ) ;
274
296
}
275
297
@@ -282,6 +304,10 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
282
304
283
305
// inject policy conditions
284
306
await this . utils . injectAuthGuard ( args , this . model , 'read' ) ;
307
+
308
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
309
+ this . logger . info ( `[withPolicy] \`aggregate\`:\n${ formatObject ( args ) } ` ) ;
310
+ }
285
311
return this . modelClient . aggregate ( args ) ;
286
312
}
287
313
@@ -295,6 +321,9 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
295
321
// inject policy conditions
296
322
await this . utils . injectAuthGuard ( args , this . model , 'read' ) ;
297
323
324
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
325
+ this . logger . info ( `[withPolicy] \`groupBy\`:\n${ formatObject ( args ) } ` ) ;
326
+ }
298
327
return this . modelClient . groupBy ( args ) ;
299
328
}
300
329
@@ -304,6 +333,10 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
304
333
// inject policy conditions
305
334
args = args ?? { } ;
306
335
await this . utils . injectAuthGuard ( args , this . model , 'read' ) ;
336
+
337
+ if ( this . logPrismaQuery && this . logger . enabled ( 'info' ) ) {
338
+ this . logger . info ( `[withPolicy] \`count\`:\n${ formatObject ( args ) } ` ) ;
339
+ }
307
340
return this . modelClient . count ( args ) ;
308
341
}
309
342
@@ -323,7 +356,7 @@ export class PolicyProxyHandler<DbClient extends DbClientContract> implements Pr
323
356
const readArgs = { select : origArgs . select , include : origArgs . include , where : ids } ;
324
357
const result = await this . utils . readWithCheck ( this . model , readArgs ) ;
325
358
if ( result . length === 0 ) {
326
- this . logger . warn ( `${ action } result cannot be read back` ) ;
359
+ this . logger . info ( `${ action } result cannot be read back` ) ;
327
360
throw this . utils . deniedByPolicy (
328
361
this . model ,
329
362
operation ,
0 commit comments