@@ -171,7 +171,8 @@ const controller = {
171
171
key : childKey ,
172
172
secretAccessKey : parentBucket . secretAccessKey ,
173
173
region : parentBucket . region ?? undefined ,
174
- active : parentBucket . active
174
+ active : parentBucket . active ,
175
+ permCodes : [ ]
175
176
} ;
176
177
177
178
let response = undefined ;
@@ -181,19 +182,30 @@ const controller = {
181
182
await controller . _validateCredentials ( childBucket ) ;
182
183
childBucket . userId = await userService . getCurrentUserId ( getCurrentIdentity ( req . currentUser , SYSTEM_USER ) ) ;
183
184
184
- // get all permissions that user has on parent bucket
185
- childBucket . permCodes = childBucket . userId !== SYSTEM_USER ?
186
- ( await bucketPermissionService . searchPermissions ( {
187
- bucketId : parentBucket . bucketId ,
188
- userId : childBucket . userId
189
- } ) ) . map ( p => p . permCode ) : [ ] ;
185
+ const parentPermissions = await bucketPermissionService . searchPermissions ( { bucketId : parentBucket . bucketId } ) ;
190
186
191
- // Create child bucket
192
- response = await bucketService . create ( childBucket ) ;
187
+ response = await utils . trxWrapper ( async ( trx ) => {
188
+ // Create child bucket
189
+ const childBucketResp = await bucketService . create ( childBucket , trx ) ;
190
+
191
+ // Add parent permissions to child bucket
192
+ if ( parentPermissions . length > 0 )
193
+ await bucketPermissionService . addPermissions (
194
+ childBucketResp . bucketId , parentPermissions , childBucket . userId , trx ) ;
195
+
196
+ return childBucketResp ;
197
+ } ) ;
193
198
}
194
199
catch ( e ) {
195
200
// If child bucket exists..
196
201
if ( e instanceof UniqueViolationError ) {
202
+ // get all permissions that user has on parent bucket
203
+ childBucket . permCodes = childBucket . userId !== SYSTEM_USER ?
204
+ ( await bucketPermissionService . searchPermissions ( {
205
+ bucketId : parentBucket . bucketId ,
206
+ userId : childBucket . userId
207
+ } ) ) . map ( p => p . permCode ) : [ ] ;
208
+
197
209
// Grant permissions if credentials precisely match
198
210
response = await bucketService . checkGrantPermissions ( childBucket ) . catch ( permErr => {
199
211
next ( new Problem ( 403 , { detail : permErr . message , instance : req . originalUrl } ) ) ;
0 commit comments