Symfony2 - 我可以给匿名用户一个' ROLE_SOMETHING'

时间:2014-09-10 15:24:50

标签: security symfony

我将Symfony框架与FOS用户捆绑包一起使用。我使用安全上下文来确定要显示的菜单项和其他项目。

$securityContext = $this->get('security.context');
if ($securityContext->isGranted($report['Permission'])){
    //add the menu item...
}

有没有办法为匿名用户提供' ROLE_USER'的安全上下文?我已登录用户正常工作。

我尝试添加一行:

role_hierarchy:
    IS_AUTHENTICATED_ANONYMOUSLY: ROLE_USER

到我的security.yml希望这样做,但显然不是。我已经用Google搜索了一下并阅读了文档。

我想:

if ($securityContext->isGranted($report['Permission'])
    || ($report['Permission'] === 'ROLE_USER' && $securityContext->is_anonymous()))

会起作用,但这感觉就像是一种黑客(而不是非常干)

编辑: 这适用于Intranet站点。我有一张包含报告名称的表格。无论是否登录,每个人都应该能够看到一些报告。某些报告需要查看权限。当只有少数用户需要访问时,我不想创建数百个用户。

1 个答案:

答案 0 :(得分:1)

如果您尝试向某个网址提供访问权限,为什么不以这种方式授权呢?

您有2种方法可以实现此目的:创建防火墙授权或角色定义网址

1)防火墙自动化

firewalls:
        test:
            pattern: ^/ws // you url or schema url with regex
            anonymous: true

2)具有角色定义访问权限的网址

access_control:
         - { path: ^/given-url, roles: IS_AUTHENTICATED_ANONYMOUSLY }


// in app/config/security.yml

在这两种情况下,未经过身份验证的用户和经过身份验证的用户都可以访问此网址

顺便说一句,如果你想测试(为了显示一些用户变量)用户是否经过身份验证,只需在树枝上进行测试

   {% if app.user is defined and app.user is not null %} 
       The user {{ app.user.username }} is connected.
   {% else %}
       No user connected
   {% end %}

编辑:基于内容的视图:juste为您的操作创建一个与您的防火墙规则不匹配的路由