Security Symfony2-我可以给匿名用户一个';角色';

Security Symfony2-我可以给匿名用户一个';角色';,security,symfony,Security,Symfony,我将Symfony框架与FOS用户包一起使用。我正在使用安全上下文来确定要显示哪些菜单项和其他项 $securityContext = $this->get('security.context'); if ($securityContext->isGranted($report['Permission'])){ //add the menu item... } 是否有任何方法可以为匿名用户提供“角色\用户”的安全上下文?我已让登录用户正常工作 我尝试添加一行: role_h

我将Symfony框架与FOS用户包一起使用。我正在使用安全上下文来确定要显示哪些菜单项和其他项

$securityContext = $this->get('security.context');
if ($securityContext->isGranted($report['Permission'])){
    //add the menu item...
}
是否有任何方法可以为匿名用户提供“角色\用户”的安全上下文?我已让登录用户正常工作

我尝试添加一行:

role_hierarchy:
    IS_AUTHENTICATED_ANONYMOUSLY: ROLE_USER
为了我的安全,我希望这样做,但显然不行。我在谷歌上搜索了一下并阅读了文档

我想:

if ($securityContext->isGranted($report['Permission'])
    || ($report['Permission'] === 'ROLE_USER' && $securityContext->is_anonymous()))
可以,但这感觉有点像黑客(而且不是很干)

编辑:
这是一个内部网站。我有一个表,其中包含报告的名称。有些报告应该能够被所有人看到,无论他们是否登录。某些报告需要查看权限。我不想在只有少数用户需要访问的情况下创建几百个用户

如果您试图让人们访问给定的url,为什么不简单地通过这种方式进行授权

有两种方法可以实现这一点:创建防火墙授权或url定义的角色

1) 防火墙自动化

firewalls:
        test:
            pattern: ^/ws // you url or schema url with regex
            anonymous: true
2) 具有角色定义访问权限的url

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


// in app/config/security.yml
在这两种情况下,未经身份验证的用户和经过身份验证的用户都可以访问此url

顺便说一下,如果您想测试(为了显示一些用户变量)用户是否经过身份验证,只需在twig中进行测试

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

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

您想做什么?默认情况下,授予用户角色意味着他需要登录。您不能这样做,因为伪角色是经过身份验证的。\u匿名地仅用于symfony中内置的系统身份验证,以区分未经身份验证的用户何时进入某个防火墙覆盖的某个路由。另一种方法是使用投票人:。最终的结果是:$securityContext->isgranded('view',$report);所有的逻辑都会在您的投票者类中结束。@Cerad谢谢,我将使用投票者进行调查。我读过关于它们的文章,但没有意识到这对它们来说是一个完美的用例。谢谢,但我已经把这部分做好了。我对这篇文章做了编辑。内容创建也是基于角色的,我需要开始工作。就像我的编辑一样,你应该编辑你的内容视图操作路由到不同的url,以不匹配你的防火墙规则,然后让未经身份验证的用户访问该url。很明显,我今天在解释自己方面做得很差。很抱歉我希望在控制器内部根据安全上下文做出决定,以决定是否需要将项添加到传递给模板进行渲染的数组中。i、 因此,你需要从防火墙中删除控制器操作的路径,并测试用户是否登录了控制器操作。是的,这就是我在原始问题中的“黑客”所做的。