我正在使用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路径或spesefic路径。 admin由每个页面中的Role定义,并且页面的conteint根据用户类型而不同。 (我知道这很糟糕。)
这意味着我必须让所有用户访问所有页面,如果他们登录,他们会获得不同类型的数据。
但我有以下错误:
当我登录并将用户发送到另一条路径(不是作为安全路径定义)时,它没有显示任何信用信息?!!!
如何使用此结构访问数据?
答案 0 :(得分:1)
您所写的内容:如果您的路径不在防火墙下,则凭据信息在此处不可用,因为防火墙不会覆盖它们。
在您的特定情况下,您将可以访问以/cp
开头的路线上的凭据信息 。您可能想要做的是将防火墙模式定义为^/
。这样您的防火墙就会覆盖您网站上的所有路径,然后使用access_control
或您使用的任何方法来检查特定网页的访问权限。
答案 1 :(得分: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
}