Я не понимаю,
выдать новое AccessDeniedException (‘message’) всегда перенаправлять на страницу входа.
PS: я использую FOSUserBundle и здесь содержание security.yml:
security:
encoders:
ANDRY\UserBundle\Entity\User: sha512
role_hierarchy:
# Un admin hérite des droits d'auteur et de modérateur
# ROLE_ADMIN: [ROLE_AUTEUR, ROLE_MODERATEUR]
# On garde ce rôle superadmin, il nous resservira par la suite
# ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
# ROLE_EMPLOYER: ROLE_SEEKER
ROLE_ADMIN: [ROLE_EMPLOYER, ROLE_SEEKER, ROLE_ALLOWED_TO_SWITCH]
providers:
main:
id: fos_user.user_provider.username
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
# main_login:
# pattern: ^/%locale%/login$
# anonymous: true
main:
pattern: ^/
anonymous: true
provider: main
form_login:
login_path: fos_user_security_login
check_path: fos_user_security_check
default_target_path: /%locale%
logout:
path: fos_user_security_logout
target: /%locale%
remember_me:
secret: %secret%
access_control:
# - { path: ^/admin, roles: [ROLE_ADMIN, ROLE_SUPER_ADMIN] }
По умолчанию Symfony перенаправляет неаутентифицированный запрос на вход в систему из конфигурации брандмауэра. Чтобы изменить это, вы должны создать свой собственный обработчик отказа в доступе, который реализует AccessDeniedHandlerInterface и настроить брандмауэр для его использования.
class AccessDeniedHandler implements AccessDeniedHandlerInterface
{
public function handle(Request $request, AccessDeniedException $accessDeniedException)
{
// ...
return new Response($content, 403);
}
}
Настройте его как службу и измените конфигурацию брандмауэра в security.yml
firewalls:
default:
...
access_denied_handler: you_access_denied_handler_service
Других решений пока нет …