Security Symfony2-我可以给匿名用户一个';角色';
我将Symfony框架与FOS用户包一起使用。我正在使用安全上下文来确定要显示哪些菜单项和其他项Security Symfony2-我可以给匿名用户一个';角色';,security,symfony,Security,Symfony,我将Symfony框架与FOS用户包一起使用。我正在使用安全上下文来确定要显示哪些菜单项和其他项 $securityContext = $this->get('security.context'); if ($securityContext->isGranted($report['Permission'])){ //add the menu item... } 是否有任何方法可以为匿名用户提供“角色\用户”的安全上下文?我已让登录用户正常工作 我尝试添加一行: role_h
$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、 因此,你需要从防火墙中删除控制器操作的路径,并测试用户是否登录了控制器操作。是的,这就是我在原始问题中的“黑客”所做的。