我想听听有关优化我们的架构以实现以下内容的最佳方法的一些想法.
我们有许多对象/数据库条目(事件,场地等),其中一些有子对象(意味着相同的权限适用 - 图像,元素等)
用户可以属于组,因此诸如事件,场所之类的父对象可以由所有人,仅组,仅一个用户编辑/可查看.
目前,我们有一个用户,用户组和组表来管理用户和组.
每个父对象(如场所)作为user_id和group_id的列.
工作正常(在symfony 1.4中),但它很乱 - 任何事情的查询都必须进行复杂的连接以获得可能的组等...我们想找到一种更简单的方法.
我对Sf2 ACL组件感到非常兴奋但是我被一遍又一遍地告诉我不应该用它来查找用户可以管理的对象 - 而是我应该使用ACL来查明是否允许用户管理他自己的对象对象(似乎不是很有用,但无论如何).
我发现在网上进行的所有替代尝试都是为了从db中提取所有对象,然后通过ACL过滤 - 这对于妈妈和流行网站来说很可爱 - 不会发生在一百万个对象上.
所以...我很想听听关于我们如何做到这一点的想法 - 我们也愿意让symfony留下具有可扩展ACL解决方案的东西,但到目前为止还没有找到任何东西(php或ruby)如此开放虽然我们很乐意继续使用Sf.请注意,我们打算在重要的情况下使用MongoDB.
jzi*_*011 11
根据我的理解,ACL用于为特定场景提供对特定人员的特定对象的访问.您所描述的内容更为通用,但它只是偏离Symfony2概述的安全性(此人具有"管理员"角色,但仅适用于特定组中包含的对象).
ACL不应该用于存储大量的东西,因为如果它太大,检查它会变得昂贵.因此,在添加新用户时,或者甚至在组中添加新对象时,默认情况下会抛出一堆东西(如果使用ACL,则无论何时创建一个组,都必须向组中的每个人添加一个条目新的对象),一段时间后会对性能产生负担......
我目前正在研究将Symfony2用于网络应用程序的可能性,但我也遇到了这种安全问题,因为我们有类似的需求.我不是Symfony2的专家,但从我所看到的,你可能有几个选择:
创建一个选民来处理这个问题.选民允许您检查授权令牌,并根据您的处理方式返回授予或拒绝访问权限.因此,您可以创建一个自定义选民,用于检查用户的组并尝试将其与该对象所在的组进行匹配.如果是这样,如果选民对当前检查无效,则返回ACCESS_GRANTED,否则返回ACCESS_DENIED或ACCESS_ABSTAIN.编辑:这是一个指向Symfony2选民食谱的链接:http://symfony.com/doc/current/cookbook/security/voters.html
可能还想研究SecurityContext接口.这提供了"isGranted()"方法,用于确定对对象的访问.如果选民不够简单,你可能必须走创建一个新的SecurityContext类的路线; 我认为这会涉及到更多.
就像我说的,我不是专业人士,也没有解决方案; 这些只是我正在研究的一些方向,试图解决(我的感觉)类似的问题.希望这有点帮助.
| 归档时间: |
|
| 查看次数: |
5742 次 |
| 最近记录: |