我将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站点。我有一张包含报告名称的表格。无论是否登录,每个人都应该能够看到一些报告。某些报告需要查看权限。当只有少数用户需要访问时,我不想创建数百个用户。
答案 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为您的操作创建一个与您的防火墙规则不匹配的路由