通过访问控制拒绝返回访问

时间:2018-11-07 18:58:54

标签: symfony security symfony4 access-control

我在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

2 个答案:

答案 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

Symfony Doc.

答案 1 :(得分:0)

您必须允许用户访问此路径,而要使用您的控制器来检查用户角色。

$this->denyAccessUnlessGranted('ROLE_MANAGER ', null, 'Unable to access this page!');

$this->isGranted('ROLE_MANAGER');

取决于您要做什么。