Если я правильно понял, вы хотите вернуть ошибку 404 или 403, если у пользователя нет прав на просмотр страницы.Есть много вариантов сделать это.Я перечисляю только несколько.
Среди предоставленных модулей я обычно использую разрешение по термину .Вы можете просто добавить поле термина к своему контенту, установить полномочия роли для каждого термина, и вы готовы к работе (для получения дополнительной информации обратитесь к их документам и учебным пособиям).Для более сложных структур есть органических групп , но обычно это избыточно для большинства случаев (но это очень крутой модуль).Есть много других модулей, таких как:
Для пользовательских маршрутов вы можете просто определить разрешение на доступ и дать это разрешение надлежащемуrole:
e_index.content:
path: '/your/path'
defaults:
_title: 'Title'
requirements:
_permission: 'your permission'
Вы можете использовать hook_node_access () или hook_entity_access (), если ваш путь представляет сущность.
/**
* Implements hook_node_access().
*/
function yourmodule_node_access(\Drupal\node\NodeInterface $node, $op, \Drupal\Core\Session\AccountInterface $account) {
if ($your_condition) {
...
$access_value = TRUE/FALSE;
}
if ($access_value === TRUE) {
$access = new AccessResultAllowed();
} elseif ($access_value === FALSE) {
$access = new AccessResultForbidden();
} else {
$access = new AccessResultNeutral();
}
$access->addCacheableDependency($node);
return $access;
}
Или вы можете просто вызвать исключение Symfony:
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class MyClass {
public fucntion myMethod() {
throw new AccessDeniedHttpException();
// or
throw new NotFoundHttpException();
}
}