diff --git a/Resources/config/services/workflow.yml b/Resources/config/services/workflow.yml
index 01a26f1fc..a80cf40dd 100644
--- a/Resources/config/services/workflow.yml
+++ b/Resources/config/services/workflow.yml
@@ -3,4 +3,10 @@ services:
Chill\TaskBundle\Workflow\Definition\DefaultTaskDefinition:
tags:
- - { name: 'chill_task.workflow_definition' }
\ No newline at end of file
+ - { name: 'chill_task.workflow_definition' }
+
+ Chill\TaskBundle\Workflow\Event\DefaultTaskGuardEvent:
+ arguments:
+ - '@Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface'
+ tags:
+ - { name: kernel.event_subscriber }
\ No newline at end of file
diff --git a/Workflow/Event/DefaultTaskGuardEvent.php b/Workflow/Event/DefaultTaskGuardEvent.php
new file mode 100644
index 000000000..e4ceff327
--- /dev/null
+++ b/Workflow/Event/DefaultTaskGuardEvent.php
@@ -0,0 +1,59 @@
+
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+namespace Chill\TaskBundle\Workflow\Event;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Symfony\Component\Workflow\Event\GuardEvent;
+use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
+use Chill\TaskBundle\Security\Authorization\TaskVoter;
+
+/**
+ *
+ *
+ * @author Julien Fastré
+ */
+class DefaultTaskGuardEvent implements EventSubscriberInterface
+{
+ public static function getSubscribedEvents(): array
+ {
+ return [
+ 'workflow.task_default.guard' => [
+ 'checkACL'
+ ]
+ ];
+ }
+
+ /**
+ *
+ * @var AuthorizationCheckerInterface
+ */
+ protected $authorizationChecker;
+
+ public function __construct(AuthorizationCheckerInterface $authorizationChecker)
+ {
+ $this->authorizationChecker = $authorizationChecker;
+ }
+
+ public function checkACL(GuardEvent $event)
+ {
+ if (FALSE === $this->authorizationChecker->isGranted(TaskVoter::UPDATE,
+ $event->getSubject())) {
+ $event->setBlocked(true);
+ }
+ }
+}