Skip to content

Commit

Permalink
[Community] protects readOnly roles from deletion
Browse files Browse the repository at this point in the history
phpcs
  • Loading branch information
Elorfin committed Jan 28, 2021
1 parent 2d8a21a commit dbe7c88
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 27 deletions.
23 changes: 12 additions & 11 deletions src/main/core/API/Crud/User/RoleCrud.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Claroline\CoreBundle\API\Crud\User;

use Claroline\AppBundle\Event\Crud\CreateEvent;
use Claroline\AppBundle\Event\Crud\DeleteEvent;
use Claroline\CoreBundle\Entity\Role;
use Doctrine\DBAL\Driver\Connection;

Expand All @@ -11,19 +12,11 @@ class RoleCrud
/** @var Connection */
private $conn;

/**
* RoleCrud constructor.
*
* @param Connection $conn
*/
public function __construct(Connection $conn)
{
$this->conn = $conn;
}

/**
* @param CreateEvent $event
*/
public function preCreate(CreateEvent $event)
{
/** @var Role $role */
Expand All @@ -34,9 +27,6 @@ public function preCreate(CreateEvent $event)
}
}

/**
* @param CreateEvent $event
*/
public function postCreate(CreateEvent $event)
{
/** @var Role $role */
Expand Down Expand Up @@ -73,4 +63,15 @@ public function postCreate(CreateEvent $event)
->execute();
}
}

public function preDelete(DeleteEvent $event)
{
/** @var Role $role */
$role = $event->getObject();

if ($role->isReadOnly()) {
// abort delete
$event->block();
}
}
}
33 changes: 17 additions & 16 deletions src/main/core/Resources/config/services/crud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ services:
_defaults:
autowire: false
autoconfigure: false
public: true #because lazy
public: false
tags: [claroline.crud]

Claroline\CoreBundle\API\Crud\WorkspaceCrud:
Expand Down Expand Up @@ -32,16 +32,17 @@ services:
- '@Claroline\CoreBundle\Manager\Workspace\WorkspaceManager'
- '@Icap\NotificationBundle\Manager\NotificationUserParametersManager'
tags:
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_user, method: preCreate }
- { name: kernel.event_listener, event: crud.pre.delete.user, method: preDelete }
- { name: kernel.event_listener, event: crud_pre_update_object_claroline_corebundle_entity_user, method: preUpdate }
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_user, method: preCreate }
- { name: kernel.event_listener, event: crud_pre_delete_object_claroline_corebundle_entity_user, method: preDelete }
- { name: kernel.event_listener, event: crud_pre_update_object_claroline_corebundle_entity_user, method: preUpdate }

Claroline\CoreBundle\API\Crud\User\RoleCrud:
arguments:
- '@doctrine.dbal.default_connection'
tags:
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_role, method: preCreate }
- { name: kernel.event_listener, event: crud_post_create_object_claroline_corebundle_entity_role, method: postCreate }
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_role, method: preCreate }
- { name: kernel.event_listener, event: crud_post_create_object_claroline_corebundle_entity_role, method: postCreate }
- { name: kernel.event_listener, event: crud_pre_delete_object_claroline_corebundle_entity_role, method: preDelete }

Claroline\CoreBundle\API\Crud\User\OrganizationCrud:
arguments:
Expand All @@ -50,16 +51,16 @@ services:
- '@claroline.manager.cryptography_manager'
- '@Claroline\AppBundle\API\Crud'
tags:
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_organization_organization, method: preCreate }
- { name: kernel.event_listener, event: crud_post_create_object_claroline_corebundle_entity_organization_organization, method: postCreate }
- { name: kernel.event_listener, event: crud_pre_delete_object_claroline_corebundle_entity_organization_organization, method: preDelete }
- { name: kernel.event_listener, event: crud_post_patch_object_claroline_corebundle_entity_organization_organization, method: postPatch }
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_organization_organization, method: preCreate }
- { name: kernel.event_listener, event: crud_post_create_object_claroline_corebundle_entity_organization_organization, method: postCreate }
- { name: kernel.event_listener, event: crud_pre_delete_object_claroline_corebundle_entity_organization_organization, method: preDelete }
- { name: kernel.event_listener, event: crud_post_patch_object_claroline_corebundle_entity_organization_organization, method: postPatch }

Claroline\CoreBundle\API\Crud\User\GroupCrud:
arguments:
- '@security.token_storage'
tags:
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_group, method: preCreate }
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_group, method: preCreate }

Claroline\CoreBundle\API\Crud\Resource\ResourceNodeCrud:
arguments:
Expand All @@ -72,20 +73,20 @@ services:
- '@Claroline\CoreBundle\API\Serializer\Resource\ResourceNodeSerializer'
- '%claroline.param.files_directory%'
tags:
- { name: kernel.event_listener, event: crud.pre.create.resource_node, method: preCreate }
- { name: kernel.event_listener, event: crud.pre.delete.resource_node, method: preDelete }
- { name: kernel.event_listener, event: crud.pre.copy.resource_node, method: preCopy }
- { name: kernel.event_listener, event: crud.pre.create.resource_node, method: preCreate }
- { name: kernel.event_listener, event: crud.pre.delete.resource_node, method: preDelete }
- { name: kernel.event_listener, event: crud.pre.copy.resource_node, method: preCopy }

Claroline\CoreBundle\API\Crud\File\PublicFile:
arguments:
- '%claroline.param.files_directory%'
- '@security.token_storage'
- '@Claroline\CoreBundle\Library\Utilities\FileUtilities'
tags:
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_file_publicfile, method: preCreate }
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_file_publicfile, method: preCreate }

Claroline\CoreBundle\API\Crud\Cryptography\ApiTokenCrud:
arguments:
- '@security.token_storage'
tags:
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_cryptography_apitoken, method: preCreate }
- { name: kernel.event_listener, event: crud_pre_create_object_claroline_corebundle_entity_cryptography_apitoken, method: preCreate }

0 comments on commit dbe7c88

Please # to comment.