@@ -1183,7 +1183,7 @@ export class PolicyUtil extends QueryUtils {
1183
1183
1184
1184
if ( this . hasFieldLevelPolicy ( model ) ) {
1185
1185
// recursively inject selection for fields needed for field-level read checks
1186
- const readFieldSelect = this . getFieldReadCheckSelector ( model ) ;
1186
+ const readFieldSelect = this . getFieldReadCheckSelector ( model , args . select ) ;
1187
1187
if ( readFieldSelect ) {
1188
1188
this . doInjectReadCheckSelect ( model , args , { select : readFieldSelect } ) ;
1189
1189
}
@@ -1311,17 +1311,20 @@ export class PolicyUtil extends QueryUtils {
1311
1311
}
1312
1312
1313
1313
// get a merged selector object for all field-level read policies
1314
- private getFieldReadCheckSelector ( model : string ) {
1314
+ private getFieldReadCheckSelector ( model : string , fieldSelection : Record < string , any > | undefined ) {
1315
1315
const def = this . getModelPolicyDef ( model ) ;
1316
1316
let result : any = { } ;
1317
1317
const fieldLevel = def . fieldLevel ?. read ;
1318
1318
if ( fieldLevel ) {
1319
- for ( const def of Object . values ( fieldLevel ) ) {
1320
- if ( def . entityChecker ?. selector ) {
1321
- result = deepmerge ( result , def . entityChecker . selector ) ;
1322
- }
1323
- if ( def . overrideEntityChecker ?. selector ) {
1324
- result = deepmerge ( result , def . overrideEntityChecker . selector ) ;
1319
+ for ( const [ field , def ] of Object . entries ( fieldLevel ) ) {
1320
+ if ( ! fieldSelection || fieldSelection [ field ] ) {
1321
+ // field is selected, merge the field-level selector
1322
+ if ( def . entityChecker ?. selector ) {
1323
+ result = deepmerge ( result , def . entityChecker . selector ) ;
1324
+ }
1325
+ if ( def . overrideEntityChecker ?. selector ) {
1326
+ result = deepmerge ( result , def . overrideEntityChecker . selector ) ;
1327
+ }
1325
1328
}
1326
1329
}
1327
1330
}
0 commit comments