【发布时间】:2014-09-10 15:24:49
【问题描述】:
我正在使用带有 FOS 用户包的 Symfony 框架。我正在使用安全上下文来确定要显示哪些菜单项和其他项。
$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()))
会起作用,但这感觉像是一种 hack(而且不是很干)
编辑: 这是一个 Intranet 站点。我有一个包含报告名称的表格。有些报告应该能够被所有人看到,无论他们是否登录。某些报告需要查看权限。当只有少数人需要访问时,我不想创建数百个用户。
【问题讨论】:
-
你想做什么?默认情况下,赋予用户角色意味着他需要登录。
-
你不能,因为伪角色 IS_AUTHENTICATED_ANONYMOUSLY 仅用于 symfony 中内置的系统身份验证,以区分未经身份验证的用户何时进入某些防火墙覆盖的某些路由。
-
另一种方法是使用选民:symfony.com/doc/current/cookbook/security/…。你最终得到: $securityContext->isGranted('view',$report);所有逻辑最终都在您的选民类中。
-
@Cerad 谢谢,我将使用选民进行调查。我读过它们,但没有意识到这对它们来说是一个完美的用例。