0

我有几天试图完成这项工作,但作为最后的手段,我不能这样做,我希望任何人都可以在这里帮助我。关键是我的应用程序,因为每个应用程序都有一个frontend应该由系统中注册的任何用户访问,除了那些迄今为止具有该角色ROLE_ADMINbackend用户,否则应该只能访问具有该角色的用户ROLE_ADMIN和普通用户没有自己的角色或具有默认角色 ROLE_USER 都不应该能够登录。

我遇到的问题是,无论如何,如果我与任何没有管理员权限(缺少ROLE_ADMIN)的普通用户签名并访问app.php/admin他们可以毫无问题地输入的 URL,这是完全错误的。另一方面,如果我尝试frontend与任何用户一起登录,ROLE_ADMIN则可以毫无问题地做到这一点,这不应该发生。

这是我的配置security.yml

security:
    encoders:
        FOS\UserBundle\Model\UserInterface: sha512

    providers:
        fos_userbundle:
            id: fos_user.user_provider.username_email

    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
                login_path:  /login
                check_path:  /login_check
                default_target_path: home
                always_use_default_target_path: true
                use_referer: true
            logout:
                 path: fos_user_security_logout
                 target: /
                 invalidate_session: true
            anonymous: ~

    access_control:
        # Anonymous area
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/isLoggedIn$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/registro, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/cedula, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/rif, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/correo, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/usuario, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/razon_social, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/registro_mercantil, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/padre, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/correo_alternativo, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/paises, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/estados, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/ciudades, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/municipios, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/parroquias, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/empresas, role: IS_AUTHENTICATED_ANONYMOUSLY }

        # Secured area
        - { path: ^/, role: ROLE_USER }
        - { path: ^/admin, role: ROLE_ADMIN }

我究竟做错了什么?谁能给我任何建议?

我已经从上到下多次阅读文档,但不明白我做错了什么

4

1 回答 1

3

访问控制的工作原理与路由非常相似,第一个匹配就是执行的那个。

这意味着对 /admin 的请求将匹配:

- { path: ^/, role: ROLE_USER }

你应该把你的 /admin 规则放在第一位。此外,我发现尽可能保护控制器(避免此类常见问题)的更好做法:http: //symfony.com/doc/current/book/security.html#securing-controllers-and-other-代码

于 2015-02-05T13:56:12.860 回答