@@ -55,7 +55,9 @@ case class CreateAdministrativePermissionAPIRequestADM(id: Option[IRI] = None,
55
55
56
56
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
57
57
stringFormatter.validateProjectIri(forProject, throw BadRequestException (s " Invalid project IRI " ))
58
- stringFormatter.validateOptionalPermissionIri(id, throw BadRequestException (s " Invalid permission IRI " ))
58
+ stringFormatter.validateOptionalPermissionIri(
59
+ id,
60
+ throw BadRequestException (s " Invalid permission IRI ${id.get} is given. " ))
59
61
if (hasPermissions.isEmpty) throw BadRequestException (" Permissions needs to be supplied." )
60
62
}
61
63
@@ -80,7 +82,9 @@ case class CreateDefaultObjectAccessPermissionAPIRequestADM(id: Option[IRI] = No
80
82
81
83
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
82
84
stringFormatter.validateProjectIri(forProject, throw BadRequestException (s " Invalid project IRI " ))
83
- stringFormatter.validateOptionalPermissionIri(id, throw BadRequestException (s " Invalid permission IRI " ))
85
+ stringFormatter.validateOptionalPermissionIri(
86
+ id,
87
+ throw BadRequestException (s " Invalid permission IRI ${id.get} is given. " ))
84
88
forGroup match {
85
89
case Some (iri : IRI ) =>
86
90
if (forResourceClass.isDefined)
@@ -245,7 +249,7 @@ case class PermissionChangeGroupRequestADM(permissionIri: IRI,
245
249
246
250
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
247
251
if (! stringFormatter.isKnoraPermissionIriStr(permissionIri)) {
248
- throw BadRequestException (s " Invalid IRI is given: $permissionIri . " )
252
+ throw BadRequestException (s " Invalid permission IRI $permissionIri is given." )
249
253
}
250
254
251
255
}
@@ -268,7 +272,7 @@ case class PermissionChangeHasPermissionsRequestADM(
268
272
269
273
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
270
274
if (! stringFormatter.isKnoraPermissionIriStr(permissionIri)) {
271
- throw BadRequestException (s " Invalid IRI is given: $permissionIri . " )
275
+ throw BadRequestException (s " Invalid permission IRI $permissionIri is given." )
272
276
}
273
277
274
278
}
@@ -291,7 +295,7 @@ case class PermissionChangeResourceClassRequestADM(
291
295
292
296
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
293
297
if (! stringFormatter.isKnoraPermissionIriStr(permissionIri)) {
294
- throw BadRequestException (s " Invalid IRI is given: $permissionIri . " )
298
+ throw BadRequestException (s " Invalid permission IRI $permissionIri is given." )
295
299
}
296
300
}
297
301
@@ -312,7 +316,7 @@ case class PermissionChangePropertyRequestADM(permissionIri: IRI,
312
316
313
317
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
314
318
if (! stringFormatter.isKnoraPermissionIriStr(permissionIri)) {
315
- throw BadRequestException (s " Invalid IRI is given: $permissionIri . " )
319
+ throw BadRequestException (s " Invalid permission IRI $permissionIri is given." )
316
320
}
317
321
}
318
322
@@ -354,18 +358,11 @@ case class AdministrativePermissionForIriGetRequestADM(administrativePermissionI
354
358
requestingUser : UserADM ,
355
359
apiRequestID : UUID )
356
360
extends PermissionsResponderRequestADM {
357
- // Check user's permission for the operation
358
- // TODO: should get the project the permission is assigned to and check if the requesting user is the project admin
359
- if (! requestingUser.isSystemAdmin
360
- && ! requestingUser.permissions.isProjectAdminInAnyProject()
361
- && ! requestingUser.isSystemUser) {
362
- // not a system admin
363
- throw ForbiddenException (" Administrative permission can only be queried by system and project admin." )
364
- }
365
361
366
362
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
367
- stringFormatter.validatePermissionIri(administrativePermissionIri,
368
- throw BadRequestException (s " Invalid permission IRI " ))
363
+ stringFormatter.validatePermissionIri(
364
+ administrativePermissionIri,
365
+ throw BadRequestException (s " Invalid permission IRI $administrativePermissionIri is given. " ))
369
366
}
370
367
371
368
/**
@@ -400,7 +397,15 @@ case class AdministrativePermissionForProjectGroupGetADM(projectIri: IRI, groupI
400
397
* @param requestingUser
401
398
*/
402
399
case class AdministrativePermissionForProjectGroupGetRequestADM (projectIri : IRI , groupIri : IRI , requestingUser : UserADM )
403
- extends PermissionsResponderRequestADM
400
+ extends PermissionsResponderRequestADM {
401
+ // Check user's permission for the operation
402
+ if (! requestingUser.isSystemAdmin
403
+ && ! requestingUser.permissions.isProjectAdmin(projectIri)
404
+ && ! requestingUser.isSystemUser) {
405
+ // not a system admin
406
+ throw ForbiddenException (" Administrative permission can only be queried by system and project admin." )
407
+ }
408
+ }
404
409
405
410
/**
406
411
* Create a single [[AdministrativePermissionADM ]].
@@ -421,7 +426,7 @@ case class AdministrativePermissionCreateRequestADM(createRequest: CreateAdminis
421
426
&& ! requestingUser.permissions.isProjectAdmin(createRequest.forProject)
422
427
&& ! requestingUser.isSystemUser) {
423
428
// not a system admin
424
- throw ForbiddenException (" A new administrative permission can only be added by a system admin." )
429
+ throw ForbiddenException (" A new administrative permission can only be added by system or project admin." )
425
430
}
426
431
}
427
432
@@ -434,14 +439,6 @@ case class AdministrativePermissionCreateRequestADM(createRequest: CreateAdminis
434
439
*/
435
440
case class ObjectAccessPermissionsForResourceGetADM (resourceIri : IRI , requestingUser : UserADM )
436
441
extends PermissionsResponderRequestADM {
437
- // Check user's permission for the operation
438
- // TODO: should get the project the resource belongs to and check if the requestingUser is the project admin
439
- if (! requestingUser.isSystemAdmin
440
- && ! requestingUser.permissions.isProjectAdminInAnyProject()
441
- && ! requestingUser.isSystemUser) {
442
- // not a system admin
443
- throw ForbiddenException (" Object access permissions can only be queried by system and project admin." )
444
- }
445
442
446
443
implicit val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
447
444
@@ -459,16 +456,6 @@ case class ObjectAccessPermissionsForResourceGetADM(resourceIri: IRI, requesting
459
456
case class ObjectAccessPermissionsForValueGetADM (valueIri : IRI , requestingUser : UserADM )
460
457
extends PermissionsResponderRequestADM {
461
458
462
- // Check user's permission for the operation
463
- // TODO: should get the project the value belongs to and check if the requestingUser is the project admin
464
-
465
- if (! requestingUser.isSystemAdmin
466
- && ! requestingUser.permissions.isProjectAdminInAnyProject()
467
- && ! requestingUser.isSystemUser) {
468
- // not a system admin
469
- throw ForbiddenException (" Object access permissions can only be queried by system and project admin." )
470
- }
471
-
472
459
implicit val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
473
460
474
461
if (! stringFormatter.toSmartIri(valueIri).isKnoraValueIri) {
@@ -573,17 +560,11 @@ case class DefaultObjectAccessPermissionForIriGetRequestADM(defaultObjectAccessP
573
560
requestingUser : UserADM ,
574
561
apiRequestID : UUID )
575
562
extends PermissionsResponderRequestADM {
576
- // Check user's permission for the operation
577
- if (! requestingUser.isSystemAdmin
578
- && ! requestingUser.permissions.isProjectAdminInAnyProject()
579
- && ! requestingUser.isSystemUser) {
580
- // not a system admin
581
- throw ForbiddenException (" Default object access permissions can only be queried by system and project admin." )
582
- }
583
563
584
564
implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
585
- stringFormatter.validatePermissionIri(defaultObjectAccessPermissionIri,
586
- throw BadRequestException (s " Invalid permission IRI " ))
565
+ stringFormatter.validatePermissionIri(
566
+ defaultObjectAccessPermissionIri,
567
+ throw BadRequestException (s " Invalid permission IRI $defaultObjectAccessPermissionIri is given. " ))
587
568
}
588
569
589
570
/**
@@ -697,6 +678,23 @@ case class PermissionByIriGetRequestADM(permissionIri: IRI, requestingUser: User
697
678
stringFormatter.validatePermissionIri(permissionIri,
698
679
throw BadRequestException (s " Invalid permission IRI $permissionIri is given. " ))
699
680
}
681
+
682
+ /**
683
+ * A message that requests deletion of a permission identified through its IRI.
684
+ * A successful response will be [[PermissionDeleteResponseADM ]] with deleted=true.
685
+ *
686
+ * @param permissionIri the iri of the permission object.
687
+ * @param requestingUser the user initiating the request.
688
+ * @param apiRequestID the API request ID.
689
+ */
690
+ case class PermissionDeleteRequestADM (permissionIri : IRI , requestingUser : UserADM , apiRequestID : UUID )
691
+ extends PermissionsResponderRequestADM {
692
+
693
+ implicit protected val stringFormatter : StringFormatter = StringFormatter .getInstanceForConstantOntologies
694
+ stringFormatter.validatePermissionIri(permissionIri,
695
+ throw BadRequestException (s " Invalid permission IRI $permissionIri is given. " ))
696
+ }
697
+
700
698
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
701
699
// Responses
702
700
@@ -792,6 +790,19 @@ case class DefaultObjectAccessPermissionCreateResponseADM(
792
790
*/
793
791
case class DefaultObjectAccessPermissionsStringResponseADM (permissionLiteral : String )
794
792
793
+ /**
794
+ * Responds to deletion of a permission by returning a success message.
795
+ *
796
+ * @param permissionIri the IRI of the permission that is deleted.
797
+ * @param deleted status of delete operation.
798
+ */
799
+ case class PermissionDeleteResponseADM (permissionIri : IRI , deleted : Boolean )
800
+ extends KnoraResponseADM
801
+ with PermissionsADMJsonProtocol {
802
+
803
+ def toJsValue = permissionDeleteResponseADMFormat.write(this )
804
+ }
805
+
795
806
// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
796
807
// Components of messages
797
808
@@ -1202,27 +1213,35 @@ trait PermissionsADMJsonProtocol
1202
1213
1203
1214
implicit val permissionADMFormat : JsonFormat [PermissionADM ] =
1204
1215
jsonFormat(PermissionADM .apply, " name" , " additionalInformation" , " permissionCode" )
1216
+
1205
1217
implicit val permissionInfoADMFormat : JsonFormat [PermissionInfoADM ] = lazyFormat(
1206
1218
jsonFormat(PermissionInfoADM , " iri" , " permissionType" ))
1219
+
1207
1220
implicit val administrativePermissionADMFormat : JsonFormat [AdministrativePermissionADM ] = lazyFormat(
1208
1221
jsonFormat(AdministrativePermissionADM , " iri" , " forProject" , " forGroup" , " hasPermissions" ))
1222
+
1209
1223
implicit val objectAccessPermissionADMFormat : JsonFormat [ObjectAccessPermissionADM ] =
1210
1224
jsonFormat(ObjectAccessPermissionADM , " forResource" , " forValue" , " hasPermissions" )
1225
+
1211
1226
implicit val defaultObjectAccessPermissionADMFormat : JsonFormat [DefaultObjectAccessPermissionADM ] = lazyFormat(
1212
1227
jsonFormat6(DefaultObjectAccessPermissionADM ))
1228
+
1213
1229
implicit val permissionsDataADMFormat : JsonFormat [PermissionsDataADM ] = jsonFormat2(PermissionsDataADM )
1214
1230
1215
1231
implicit val permissionsForProjectGetResponseADMFormat : RootJsonFormat [PermissionsForProjectGetResponseADM ] =
1216
1232
jsonFormat(PermissionsForProjectGetResponseADM , " permissions" )
1233
+
1217
1234
implicit val administrativePermissionsForProjectGetResponseADMFormat
1218
1235
: RootJsonFormat [AdministrativePermissionsForProjectGetResponseADM ] =
1219
1236
jsonFormat(AdministrativePermissionsForProjectGetResponseADM , " administrative_permissions" )
1237
+
1220
1238
implicit val defaultObjectAccessPermissionsForProjectGetResponseADMFormat
1221
1239
: RootJsonFormat [DefaultObjectAccessPermissionsForProjectGetResponseADM ] =
1222
1240
jsonFormat(DefaultObjectAccessPermissionsForProjectGetResponseADM , " default_object_access_permissions" )
1223
1241
1224
1242
implicit val administrativePermissionGetResponseADMFormat : RootJsonFormat [AdministrativePermissionGetResponseADM ] =
1225
1243
jsonFormat(AdministrativePermissionGetResponseADM , " administrative_permission" )
1244
+
1226
1245
implicit val defaultObjectAccessPermissionGetResponseADMFormat
1227
1246
: RootJsonFormat [DefaultObjectAccessPermissionGetResponseADM ] =
1228
1247
jsonFormat(DefaultObjectAccessPermissionGetResponseADM , " default_object_access_permission" )
@@ -1231,6 +1250,7 @@ trait PermissionsADMJsonProtocol
1231
1250
: RootJsonFormat [CreateAdministrativePermissionAPIRequestADM ] = rootFormat(
1232
1251
lazyFormat(
1233
1252
jsonFormat(CreateAdministrativePermissionAPIRequestADM , " id" , " forProject" , " forGroup" , " hasPermissions" )))
1253
+
1234
1254
implicit val createDefaultObjectAccessPermissionAPIRequestADMFormat
1235
1255
: RootJsonFormat [CreateDefaultObjectAccessPermissionAPIRequestADM ] = rootFormat(
1236
1256
lazyFormat(
@@ -1241,21 +1261,30 @@ trait PermissionsADMJsonProtocol
1241
1261
" forResourceClass" ,
1242
1262
" forProperty" ,
1243
1263
" hasPermissions" )))
1264
+
1244
1265
implicit val administrativePermissionCreateResponseADMFormat
1245
1266
: RootJsonFormat [AdministrativePermissionCreateResponseADM ] = rootFormat(
1246
1267
lazyFormat(jsonFormat(AdministrativePermissionCreateResponseADM , " administrative_permission" )))
1268
+
1247
1269
implicit val defaultObjectAccessPermissionCreateResponseADMFormat
1248
1270
: RootJsonFormat [DefaultObjectAccessPermissionCreateResponseADM ] =
1249
1271
jsonFormat(DefaultObjectAccessPermissionCreateResponseADM , " default_object_access_permission" )
1250
1272
1251
1273
implicit val changePermissionGroupApiRequestADMFormat : RootJsonFormat [ChangePermissionGroupApiRequestADM ] =
1252
1274
jsonFormat(ChangePermissionGroupApiRequestADM , " forGroup" )
1275
+
1253
1276
implicit val changePermissionHasPermissionsApiRequestADMFormat
1254
1277
: RootJsonFormat [ChangePermissionHasPermissionsApiRequestADM ] =
1255
1278
jsonFormat(ChangePermissionHasPermissionsApiRequestADM , " hasPermissions" )
1279
+
1256
1280
implicit val changePermissionResourceClassApiRequestADMFormat
1257
1281
: RootJsonFormat [ChangePermissionResourceClassApiRequestADM ] =
1258
1282
jsonFormat(ChangePermissionResourceClassApiRequestADM , " forResourceClass" )
1283
+
1259
1284
implicit val changePermissionPropertyApiRequestADMFormat : RootJsonFormat [ChangePermissionPropertyApiRequestADM ] =
1260
1285
jsonFormat(ChangePermissionPropertyApiRequestADM , " forProperty" )
1286
+
1287
+ implicit val permissionDeleteResponseADMFormat : RootJsonFormat [PermissionDeleteResponseADM ] =
1288
+ jsonFormat(PermissionDeleteResponseADM , " permissionIri" , " deleted" )
1289
+
1261
1290
}
0 commit comments