【问题标题】:User specific content in SymfonySymfony 中的用户特定内容
【发布时间】:2015-09-11 17:42:22
【问题描述】:

我目前正在 Symfony 中开发一个 web 应用程序。该应用程序涉及许多客户,他们都有自己的帐户登录。对于用户管理,我使用了我非常满意的 Friends of Symfony User Bundle。

在应用程序中,管理员需要查看属于所有客户端的信息,而客户端需要被限制为只能查看自己的信息。

此时,FOS 将角色“用户”分配给我注册的所有帐户。我考虑过只让客户通过使用这样的查询来访问属于他的信息;

    $query = $this->getEntityManager()
        ->createQuery(
            'SELECT c FROM clientsBundle:client c
             WHERE c.name LIKE :string'
            )->setParameter('string', '%'.$string.'%');

然后将客户id的值赋予var clientID,然后根据该值(id)获取所有需要的信息。

但老实说,我并不认为这是最佳做法。

我想知道是否有一个(更简单的)选项不仅允许用户通过 Symfony 中的 security.yml 访问某些页面,而且还使该页面中的内容特定于用户。

任何帮助将不胜感激。

【问题讨论】:

    标签: php symfony fosuserbundle roles


    【解决方案1】:

    我们目前正在开发一个为用户保存会计信息的大型网络应用。因此,您只希望您的用户能够访问他们自己的数据。

    我们只需编写一些verifyAccessTo 方法,通过为该实体分配关系来检查他们尝试访问的实体是否属于他们的组织(在我们的例子中是学校)。

    它可能看起来像这样。

    public function verifyAccessToTag( School $school, Tag $entry ) {
        return $entry->getSchool()->getId() == $school->getId();
    }
    

    然后,当我们列出数据时,我们将专门查询与该学校相关的实体。

    如果您有需要特定访问权限的站点的特定区域,例如管理区域,那么可以在防火墙中执行此操作 (security.yml)。

    如果您需要筛选和限制数据,那么您查询和验证对特定数据的访问的方式可能是唯一的方法。

    整个安全世界是一个庞大的世界,但这里有一些资源可能会有所帮助。

    securing services

    deny access to content

    voters

    希望对您有所帮助。

    【讨论】:

    • 非常感谢 :) 去看看。
    • 欢迎。祝你好运。安全问题非常主观,并且非常依赖于您的数据结构和应用程序的性质。相信你的直觉,祝你好运
    【解决方案2】:

    您可以获取用户的 id 并使用它:

    $user = $this->container->get('security.context')->getToken()->getUser();
    $user->getId();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-28
      • 2011-09-12
      • 1970-01-01
      相关资源
      最近更新 更多