@@ -1183,7 +1183,7 @@ export class PolicyUtil extends QueryUtils {
11831183
11841184 if ( this . hasFieldLevelPolicy ( model ) ) {
11851185 // 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 ) ;
11871187 if ( readFieldSelect ) {
11881188 this . doInjectReadCheckSelect ( model , args , { select : readFieldSelect } ) ;
11891189 }
@@ -1311,17 +1311,20 @@ export class PolicyUtil extends QueryUtils {
13111311 }
13121312
13131313 // 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 ) {
13151315 const def = this . getModelPolicyDef ( model ) ;
13161316 let result : any = { } ;
13171317 const fieldLevel = def . fieldLevel ?. read ;
13181318 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+ }
13251328 }
13261329 }
13271330 }
0 commit comments