class AccessDeniedSubscriber in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/user/src/EventSubscriber/AccessDeniedSubscriber.php \Drupal\user\EventSubscriber\AccessDeniedSubscriber
Redirects users when access is denied.
Anonymous users are taken to the login page when attempting to access the user profile pages. Authenticated users are redirected from the login form to their profile page and from the user registration form to their profile edit form.
Hierarchy
- class \Drupal\user\EventSubscriber\AccessDeniedSubscriber implements EventSubscriberInterface uses UrlGeneratorTrait
Expanded class hierarchy of AccessDeniedSubscriber
1 string reference to 'AccessDeniedSubscriber'
- user.services.yml in core/
modules/ user/ user.services.yml - core/modules/user/user.services.yml
1 service uses AccessDeniedSubscriber
File
- core/
modules/ user/ src/ EventSubscriber/ AccessDeniedSubscriber.php, line 27 - Contains \Drupal\user\EventSubscriber\AccessDeniedSubscriber.
Namespace
Drupal\user\EventSubscriberView source
class AccessDeniedSubscriber implements EventSubscriberInterface {
use UrlGeneratorTrait;
/**
* The current user.
*
* @var \Drupal\Core\Session\AccountInterface
*/
protected $account;
/**
* Constructs a new redirect subscriber.
*
* @param \Drupal\Core\Session\AccountInterface $account
* The current user.
* @param \Drupal\Core\Routing\UrlGeneratorInterface $url_generator
* The URL generator.
*/
public function __construct(AccountInterface $account, URLGeneratorInterface $url_generator) {
$this->account = $account;
$this
->setUrlGenerator($url_generator);
}
/**
* Redirects users when access is denied.
*
* @param \Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event
* The event to process.
*/
public function onException(GetResponseForExceptionEvent $event) {
$exception = $event
->getException();
if ($exception instanceof AccessDeniedHttpException) {
$route_name = RouteMatch::createFromRequest($event
->getRequest())
->getRouteName();
if ($this->account
->isAuthenticated()) {
switch ($route_name) {
case 'user.login':
// Redirect an authenticated user to the profile page.
$event
->setResponse($this
->redirect('entity.user.canonical', [
'user' => $this->account
->id(),
]));
break;
case 'user.register':
// Redirect an authenticated user to the profile form.
$event
->setResponse($this
->redirect('entity.user.edit_form', [
'user' => $this->account
->id(),
]));
break;
}
}
elseif ($route_name === 'user.page') {
$event
->setResponse($this
->redirect('user.login'));
}
}
}
/**
* {@inheritdoc}
*/
public static function getSubscribedEvents() {
// Use a higher priority than
// \Drupal\Core\EventSubscriber\ExceptionLoggingSubscriber, because there's
// no need to log the exception if we can redirect.
$events[KernelEvents::EXCEPTION][] = [
'onException',
75,
];
return $events;
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
AccessDeniedSubscriber:: |
protected | property | The current user. | |
AccessDeniedSubscriber:: |
public static | function |
Returns an array of event names this subscriber wants to listen to. Overrides EventSubscriberInterface:: |
|
AccessDeniedSubscriber:: |
public | function | Redirects users when access is denied. | |
AccessDeniedSubscriber:: |
public | function | Constructs a new redirect subscriber. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Returns a redirect response object for the specified route. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |