我在security.yaml
中使用的Symfony 4.1.7具有以下访问控制:
access_control:
# master:
- { path: ^/master, roles: ROLE_MASTER }
# manager:
- { path: ^/.*/manager, roles: ROLE_MANAGER }
# main:
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
当我打开第二个URL (/foo/manager)
且未经授权时,我将重定向到登录路径,我需要返回访问权限而不是重定向到登录名。
我的最后一个目标是为附加角色调用事件监听器,以从事件监听器授权用户。
更新: 这是我的安全防火墙部分:
main:
pattern: ^/
user_checker: App\Security\Checker\UserChecker
anonymous: ~
provider: default
context: primary
simple_form:
authenticator: App\Security\Authenticator\UserAuthenticator
check_path: login
login_path: login
username_parameter: phone
password_parameter: password
use_referer: true
logout:
path: logout
remember_me:
secret: '%kernel.secret%'
lifetime: 604800
path: /
remember_me_parameter: remember_me
答案 0 :(得分:1)
您需要在security.yml中配置login_path
示例:
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
in_memory: { memory: ~ }
encoders:
FOS\UserBundle\Model\UserInterface: sha512
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: .*
context: user
form_login:
provider: fos_userbundle
login_path: /login
use_forward: false
check_path: /login_check
failure_path: null
答案 1 :(得分:0)
您必须允许用户访问此路径,而要使用您的控制器来检查用户角色。
$this->denyAccessUnlessGranted('ROLE_MANAGER ', null, 'Unable to access this page!');
或
$this->isGranted('ROLE_MANAGER');
取决于您要做什么。