0

我正在使用 symfony2 并且对 symfony 防火墙中的身份验证和访问控制有一点问题。

这是我的 security.yml

security:
    encoders:
        test\UserBundle\Entity\User:
        algorithm:        sha1
        encode_as_base64: false
        iterations:       1

role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

providers:
    administrators:
        entity: { class: UserBundle:User, property: email }

firewalls:

    login_firewall:
        pattern:    ^/login$
        anonymous:  ~
        security: true

    admin_area:
        pattern:    ^/cp|/(cp/.*|login_check)
        http_basic: ~
        form_login:
            login_path:  _login
            check_path:  login_check
            always_use_default_target_path: true

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY|ROLE_USER }
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/(booking/hotelsearchresult), roles: IS_AUTHENTICATED_ANONYMOUSLY }

事情在这个站点中,没有 /admin 路径或管理员的特定路径。admin 由每个页面中的角色定义,并且页面的内容根据用户类型而不同。(我知道这很糟糕)。

这意味着我必须让所有用户访问除某些页面之外的所有页面,如果他们登录,他们会获得不同类型的数据。

但我有以下错误:

当我登录并将用户发送到另一条路径(不被视为安全路径)时,它不显示任何信用信息?!!!

我应该怎么做才能拥有和访问具有这种结构的数据?

4

2 回答 2

1

正是您所写的:如果您的路径不在防火墙下,则凭据信息在那里不可用,因为防火墙不会覆盖它们。

在您的具体情况下,您只能访问以.开头的路由上的凭证信息/cp。您可能想要做的是将防火墙模式定义为^/. 以便您的防火墙覆盖您网站上的所有路径,然后使用access_control或您使用的任何方法来检查特定页面的访问权限。

于 2013-12-01T09:42:56.243 回答
0

您可以使用控制器中的以下代码检查特定用户的角色:

public function indexAction()
{
    // show different content to admin users
    if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
        // ... load admin content here
    }

    // ... load other regular content here
}
于 2013-12-01T11:48:46.540 回答