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

2023-12-26

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

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

用户可以属于组,因此事件、场地等父对象可以由所有人(仅组)或一个用户编辑/查看。

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

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

工作正常(在 symfony 1.4 中),但很混乱 - 每个查询都必须进行复杂的连接才能获得可能的组等...我们希望找到一种更简单的方法。

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

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

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


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

ACL 不应该用于存储一堆内容,因为如果它太大,检查它的成本可能会很高。因此,当添加新用户时,甚至在组下添加新对象时,默认情况下会在此处添加一堆内容(如果使用 ACL,则每当您创建一个组时,您都必须向组中的每个人添加一个条目)新对象),一段时间后会对性能产生负担......

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

  1. 创建一个投票者来处理这个问题。投票器允许您检查授权令牌并根据您的处理方式返回是否授予或拒绝访问权限。因此,您可以创建一个自定义投票器来检查用户的组并尝试将其与对象所在的组进行匹配。如果是,则返回 ACCESS_GRANTED,否则返回 ACCESS_DENIED,如果投票者对于当前检查无效,则返回 ACCESS_ABSTAIN。编辑:这是为选民提供的 Symfony2 食谱的链接:http://symfony.com/doc/current/cookbook/security/voters.html http://symfony.com/doc/current/cookbook/security/voters.html

  2. 可能还想研究 SecurityContext 接口。这提供了“isGranted()”方法来处理确定对对象的访问。如果 Voters 还不够简单,您可能需要创建一个新的 SecurityContext 类;我认为这会涉及更多一点。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Symfony2 管理用户/组对象权限的最佳方法 的相关文章

随机推荐