【问题标题】:Symfony2 - Can I give an anonymous user a 'ROLE_SOMETHING'Symfony2 - 我可以给匿名用户一个'ROLE_SOMETHING'吗
【发布时间】: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 谢谢,我将使用选民进行调查。我读过它们,但没有意识到这对它们来说是一个完美的用例。

标签: security symfony


【解决方案1】:

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

您有 2 种方法来实现此目的:创建防火墙授权或角色定义 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 %}

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

【讨论】:

  • 谢谢,但我已经完成了这部分工作。我已经对帖子进行了编辑。我需要开始工作的是基于角色的内容创建。
  • 像我的编辑一样,您应该将内容视图操作路由编辑到不同的 url ,以免与您的防火墙规则匹配,然后将访问该 url 的权限授予未经身份验证的用户
  • 我今天在解释自己方面显然做得很差。对不起。我想根据安全上下文在控制器内部做出决定,以决定是否需要将项目添加到传递给我的模板以进行渲染的数组中。即报告列表。
  • 因此您需要从防火墙中删除控制器操作的路由并测试用户是否登录了您的控制器操作
  • 是的,这就是我在原始问题中的“黑客”正在做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
相关资源
最近更新 更多