redirect home page by permission
This commit is contained in:
parent
c790e6af61
commit
5a6bee81cd
59
src/EventSubscriber/OpencaseSubscriber.php
Normal file
59
src/EventSubscriber/OpencaseSubscriber.php
Normal file
@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\opencase\EventSubscriber;
|
||||
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
|
||||
use Symfony\Component\HttpKernel\KernelEvents;
|
||||
use Drupal\Core\Url;
|
||||
|
||||
/**
|
||||
* Class OpencaseSubscriber.
|
||||
*
|
||||
* @package Drupal\opencase\EventSubscriber
|
||||
*/
|
||||
class OpencaseSubscriber implements EventSubscriberInterface {
|
||||
|
||||
private $alternativeHomePage = '/opencase/actors/client';
|
||||
|
||||
/**
|
||||
* Registers the methods in this class that should be listeners.
|
||||
*
|
||||
* @return array
|
||||
* An array of event listener definitions.
|
||||
*/
|
||||
public static function getSubscribedEvents() {
|
||||
$events[KernelEvents::REQUEST][] = ['onRequest'];
|
||||
return $events;
|
||||
}
|
||||
|
||||
/**
|
||||
* Manipulates the request object.
|
||||
*
|
||||
* @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
|
||||
* The Event to process.
|
||||
*/
|
||||
public function onRequest(GetResponseEvent $event): void {
|
||||
if ($this->requestIsForHomePage($event) && $this->currentUserShouldBeDirectedToAlternativeHomePage()){
|
||||
$this->redirectToAlternativeHomePage($event);
|
||||
}
|
||||
}
|
||||
|
||||
private function requestIsForHomePage($event):bool {
|
||||
return $event->getRequest()->getRequestUri() == '/';
|
||||
}
|
||||
|
||||
private function currentUserShouldBeDirectedToAlternativeHomePage():bool {
|
||||
return $this->currentUserCanSeeAllCases();
|
||||
}
|
||||
private function currentUserCanSeeAllCases():bool {
|
||||
return \Drupal::currentUser()->hasPermission('view all published case entities');
|
||||
}
|
||||
|
||||
private function redirectToAlternativeHomePage(GetResponseEvent $event):void {
|
||||
$redirect_target_url = Url::fromUserInput($this->alternativeHomePage);
|
||||
$response = new RedirectResponse($redirect_target_url->setAbsolute()->toString());
|
||||
$event->setResponse($response);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user