@@ -14,6 +14,8 @@ class ObjectModel extends Timestamps(Model) {
1414 const Bucket = require ( './bucket' ) ;
1515 const ObjectPermission = require ( './objectPermission' ) ;
1616 const BucketPermission = require ( './bucketPermission' ) ;
17+ const ObjectIdpPermission = require ( './objectIdpPermission' ) ;
18+ const BucketIdpPermission = require ( './bucketIdpPermission' ) ;
1719 const Version = require ( './version' ) ;
1820
1921 return {
@@ -48,7 +50,23 @@ class ObjectModel extends Timestamps(Model) {
4850 from : 'object.bucketId' ,
4951 to : 'bucket_permission.bucketId'
5052 }
51- }
53+ } ,
54+ objectIdpPermission : {
55+ relation : Model . HasManyRelation ,
56+ modelClass : ObjectIdpPermission ,
57+ join : {
58+ from : 'object.id' ,
59+ to : 'object_idp_permission.objectId'
60+ }
61+ } ,
62+ bucketIdpPermission : {
63+ relation : Model . HasManyRelation ,
64+ modelClass : BucketIdpPermission ,
65+ join : {
66+ from : 'object.bucketId' ,
67+ to : 'bucket_idp_permission.bucketId'
68+ }
69+ } ,
5270 } ;
5371 }
5472
@@ -133,14 +151,17 @@ class ObjectModel extends Timestamps(Model) {
133151 findPath ( query , value ) {
134152 if ( value ) query . where ( 'object.path' , value ) ;
135153 } ,
136- hasPermission ( query , userId , permCode ) {
137- if ( userId && permCode ) {
154+ hasPermission ( query , { userId, idp, permCode } ) {
155+ // userId will be defined if config.privacyMask is ON, in which case we want to filter by permissions.
156+ if ( userId && idp && permCode ) {
138157 query
139158 // withGraphFetched keep joining using default 'left join' operation,
140159 // to fix default behavior we are adding extra joinOperation which seems to be working with
141160 // corresponding JoinRelated
142- . withGraphFetched ( '[objectPermission, bucketPermission]' , { joinOperation : 'fullOuterJoinRelated' } )
143- . fullOuterJoinRelated ( '[objectPermission, bucketPermission]' )
161+ . withGraphFetched ( '[objectPermission, bucketPermission, objectIdpPermission, bucketIdpPermission]' , {
162+ joinOperation : 'fullOuterJoinRelated'
163+ } )
164+ . fullOuterJoinRelated ( '[objectPermission, bucketPermission, objectIdpPermission, bucketIdpPermission]' )
144165 // wrap in WHERE to make contained clauses exclusive of root query
145166 . where ( query => {
146167 query
@@ -157,6 +178,20 @@ class ObjectModel extends Timestamps(Model) {
157178 'bucketPermission.permCode' : permCode ,
158179 'bucketPermission.userId' : userId
159180 } ) ;
181+ } )
182+ . orWhere ( query => {
183+ query
184+ . where ( {
185+ 'objectIdpPermission.permCode' : permCode ,
186+ 'objectIdpPermission.idp' : idp
187+ } ) ;
188+ } )
189+ . orWhere ( query => {
190+ query
191+ . where ( {
192+ 'bucketIdpPermission.permCode' : permCode ,
193+ 'bucketIdpPermission.idp' : idp
194+ } ) ;
160195 } ) ;
161196 } ) ;
162197 } else {
0 commit comments