|
20 | 20 | set_permission,
|
21 | 21 | register_user,
|
22 | 22 | PermissionType,
|
| 23 | + user_can_write, |
23 | 24 | )
|
24 | 25 | from database.model.ai_resource.resource import AIResource
|
25 | 26 | from database.model.concept.aiod_entry import AIoDEntryORM, EntryStatus
|
@@ -404,15 +405,6 @@ def register_resource(
|
404 | 405 | resource_create: clz_create, # type: ignore
|
405 | 406 | user: KeycloakUser = Depends(get_user_or_raise),
|
406 | 407 | ):
|
407 |
| - if not user.has_any_role( |
408 |
| - KEYCLOAK_CONFIG.get("role"), |
409 |
| - f"create_{self.resource_name_plural}", |
410 |
| - f"crud_{self.resource_name_plural}", |
411 |
| - ): |
412 |
| - raise HTTPException( |
413 |
| - status_code=status.HTTP_403_FORBIDDEN, |
414 |
| - detail=f"You do not have permission to create {self.resource_name_plural}.", |
415 |
| - ) |
416 | 408 | try:
|
417 | 409 | with DbSession() as session:
|
418 | 410 | try:
|
@@ -453,19 +445,18 @@ def put_resource(
|
453 | 445 | resource_create_instance: clz_create, # type: ignore
|
454 | 446 | user: KeycloakUser = Depends(get_user_or_raise),
|
455 | 447 | ):
|
456 |
| - if not user.has_any_role( |
457 |
| - KEYCLOAK_CONFIG.get("role"), |
458 |
| - f"update_{self.resource_name_plural}", |
459 |
| - f"crud_{self.resource_name_plural}", |
460 |
| - ): |
461 |
| - raise HTTPException( |
462 |
| - status_code=status.HTTP_403_FORBIDDEN, |
463 |
| - detail=f"You do not have permission to edit {self.resource_name_plural}.", |
464 |
| - ) |
465 |
| - |
466 | 448 | with DbSession() as session:
|
467 | 449 | try:
|
468 | 450 | resource: Any = self._retrieve_resource(session, identifier)
|
| 451 | + if not ( |
| 452 | + user_can_write(user, resource.aiod_entry) |
| 453 | + or user.has_role(f"update_{self.resource_name_plural}") |
| 454 | + ): |
| 455 | + raise HTTPException( |
| 456 | + status_code=status.HTTP_403_FORBIDDEN, |
| 457 | + detail=f"You do not have permission to edit {self.resource_name_plural}.", |
| 458 | + ) |
| 459 | + |
469 | 460 | if resource.aiod_entry.status == EntryStatus.SUBMITTED:
|
470 | 461 | raise HTTPException(
|
471 | 462 | status_code=status.HTTP_403_FORBIDDEN,
|
@@ -503,18 +494,17 @@ def delete_resource(
|
503 | 494 | user: KeycloakUser = Depends(get_user_or_raise),
|
504 | 495 | ):
|
505 | 496 | with DbSession() as session:
|
506 |
| - if not user.has_any_role( |
507 |
| - KEYCLOAK_CONFIG.get("role"), |
508 |
| - f"delete_{self.resource_name_plural}", |
509 |
| - f"crud_{self.resource_name_plural}", |
510 |
| - ): |
511 |
| - raise HTTPException( |
512 |
| - status_code=status.HTTP_403_FORBIDDEN, |
513 |
| - detail=f"You do not have permission to delete {self.resource_name_plural}.", |
514 |
| - ) |
515 | 497 | try:
|
516 | 498 | # Raise error if it does not exist
|
517 | 499 | resource: Any = self._retrieve_resource(session, identifier)
|
| 500 | + if not ( |
| 501 | + user_can_administer(user, resource.aiod_entry) |
| 502 | + or user.has_role(f"delete_{self.resource_name_plural}") |
| 503 | + ): |
| 504 | + raise HTTPException( |
| 505 | + status_code=status.HTTP_403_FORBIDDEN, |
| 506 | + detail=f"You do not have permission to delete {self.resource_name_plural}.", |
| 507 | + ) |
518 | 508 | if (
|
519 | 509 | hasattr(self.resource_class, "__deletion_config__")
|
520 | 510 | and not self.resource_class.__deletion_config__["soft_delete"]
|
|
0 commit comments