gpt4 book ai didi

symfony - 使用 Symfony2 管理用户/组对象权限的最佳方式

转载 作者:行者123 更新时间:2023-12-04 01:00:53 27 4
gpt4 key购买 nike

我想听听一些关于优化我们的架构以实现以下目标的最佳方式的想法。

我们有许多对象/数据库条目(事件、 field 等),其中一些具有子对象(意味着应用相同的权限 - 图像、元数据等)

用户可以属于组,因此所有父对象(例如事件、 field )都可以编辑/查看,仅限组,只有一个用户。

目前我们有一个用户、用户组和组表来管理用户和组。

每个父对象(例如场所)作为 user_id 和 group_id 的列。

工作正常(在 symfony 1.4 中)但它很困惑 - 每个查询都必须进行复杂的连接以获取可能的组等......我们想找到一种更简单的方法。

我对 Sf2 ACL 组件感到非常兴奋,但我一再被告知我不应该使用它来查找用户可以管理的对象 - 而我应该使用 ACL 来确定是否允许用户管理他自己的对象(看起来不是很有用,但无论如何)。

我发现这样做的所有在线替代尝试都说要从数据库中提取所有对象,然后按 ACL 过滤 - 这对于妈妈和流行网站来说很可爱 - 不会发生一百万个对象。

所以...我很想听听关于我们如何做到这一点的想法——我们也愿意离开 symfony 去寻找具有可扩展 ACL 解决方案但到目前为止还没有找到任何东西(php 或 ruby​​)的东西,所以对它开放好吧,尽管我们很乐意继续使用 Sf。请注意,我们打算在重要的情况下使用 MongoDB。

最佳答案

根据我的理解,ACL 用于在特殊情况下将特定对象的访问权限授予特定人员。您所描述的更为通用,但它只是偏离了 Symfony2 对安全性的概述(此人具有“管理员”角色,但仅适用于特定组中包含的对象)。

ACL 不应该用于存储一堆东西,因为如果它变得太大,检查它会变得很昂贵。因此,当添加新用户时,甚至在组下添加新对象时(如果使用 ACL,您必须在创建组时为组中的每个人添加一个条目)新对象),一段时间后将对性能征税......

我目前正在研究将 Symfony2 用于 Web 应用程序的可能性,但我也遇到了这种安全问题,因为我们有类似的需求。我不是 Symfony2 的专家,但根据我的研究,你可能有几个选择:

  • 创建一个 Voter 来处理这个问题。选民允许您检查授权 token 并根据您的处理方式返回是否授予访问权限。因此,您可以创建一个自定义 Voter 来检查用户的组并尝试将其与对象所在的组匹配。如果是,则返回 ACCESS_GRANTED,否则返回 ACCESS_DENIED,如果投票者对当前检查无效,则返回 ACCESS_ABSTAIN。编辑:这里是 Symfony2 选民手册的链接:http://symfony.com/doc/current/cookbook/security/voters.html
  • 可能还想研究 SecurityContext 接口(interface)。这提供了处理确定对对象的访问的“isGranted()”方法。如果 Voters 还不够简单,您可能不得不创建一个新的 SecurityContext 类;我认为这会涉及更多。

  • 就像我说的,我不是专业人士,也没有解决方案;这些只是我正在研究的一些方向,试图解决(我的感觉)类似的问题。希望这会有所帮助。

    关于symfony - 使用 Symfony2 管理用户/组对象权限的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9652755/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com