Я использую Sulu CMF и у меня есть специальный контроллер для процесса продаж на веб-сайте. Только вошедшие в систему пользователи с определенным контекстом безопасности могут получить доступ к страницам, обслуживаемым контроллером, поэтому контроллер реализует SecuredControllerInterface.
class SaleController extends AbstractController implements SecuredControllerInterface
{
/* ... */
public function getSecurityContext() {
return 'private_sale.sale.purchase';
}
/* ... */
}
Когда вошедший в систему пользователь просматривает страницу, управляемую этим контроллером, и если у пользователя нет соответствующих разрешений, сервер отвечает страницей 403.
Есть ли способ перенаправить пользователя на другую страницу вместо возврата 403?






Это было бы неправильное поведение.
403 означает «не авторизовано», что переводится как «Вы вошли в систему, и я знаю, кто вы»; но у вас нет доступа к этому контенту.
401 означает «не аутентифицирован», что переводится как «Я не знаю, кто вы», вам необходимо войти в систему, чтобы продолжить.
Только во втором случае имеет смысл перенаправить на страницу входа.
Вы хотите перенаправить на вход в систему на 401 и показать «не авторизовано» на 403.
Если неаутентифицированный пользователь обращается к контроллеру, а вы проверяете там авторизацию, то у вас другая проблема, и вам следует настроить так, чтобы только полностью аутентифицированный пользователь мог получить доступ к странице.
Тогда неаутентифицированный пользователь получит 401 (и будет перенаправлен на страницу входа непосредственно Symfony), а аутентифицированный, но не авторизованный, получит правильный ответ 403.
И если вы хотите, на своей странице 403 вы можете показать все, что уместно. Вы можете настроить его, используя эти инструкции: https://docs.sulu.io/en/2.5/cookbook/custom-error-page.html
Что вам следует сделать, так это настроить страницу ошибки напрямую. Зачем вообще перенаправлять? docs.sulu.io/en/2.5/cookbook/custom-error-page.html Куда бы вы перенаправили пользователя?
Спасибо, вы абсолютно правы. Я тестировал с уже вошедшим в систему пользователем без каких-либо разрешений. Моя вина, я обновил вопрос. Итак, 403 правильный! Но есть ли способ уловить эту ситуацию в контроллере и отреагировать перенаправлением или всплывающим окном?