jho*_*orn 9 theory security tree symfony
束缚自己,这是一个棘手的问题.
我们有一个处理大数据集的系统.(每张桌子有数百万到十亿的记录).所有数据都在节点的树结构中处理.
我们正在使用Symfony2和Symfony2安全系统(Domain Objects,Acls,Aces等).我们的Acl树镜像我们的节点树.
硬币一些语言:
DP 定义的权限,即此acl节点上的ace记录EP 有效权限,没有ace记录,从父级继承的权限 DP业务逻辑上,我们为每个用户的对象分配0或1个ace,并且在没有的情况下依赖继承. Root > lvl1 (DP: VIEW) > lvl2 > lvl3 (EP: VIEW)
到现在为止还挺好.这一切都有效.
一些节点不仅具有父节点,而且与其他节点(多对多节点)相关联.当一个节点与另一个节点相关联时,这表示树上的一个单独路径,供acls遵循.IE我们将有一条或多条路径从树到根以收集ace.
Leaf < Parent < GrandParent < Root
Leaf < AssociatedNode < AssociatedNodeParent < AssociatedNodeGrandParent < Root
...
Run Code Online (Sandbox Code Playgroud)
或者用于管理aces投票的逻辑很好,我们不确定的是如何表示树上的多个路径.我们当前(读:坏)的想法是:
在您的多父案例中,您实际上有一个从初始节点到任何包含 ace 的节点的逆树遍历。因此,如果我们将向上和侧面遍历操作可视化为它们自己的树(修剪循环),那么在最坏的情况下,您可以在找到王牌之前搜索整个节点网络。
解决这个问题的最简单方法是保证某种形式的堆属性,以确保每个带有 ace 的节点都具有可以驱动遍历的大或小值。O(n)这可以将最坏情况(如果您搜索数据库索引中的每个节点)的遍历时间缩短到O(log n)通过网络反向路径时的遍历时间。
这里之所以O(1)难以遍历,是因为你的节点网络保证了环路的可能性。但是,如果您构建一个 ACL 图来维护最小堆等属性,那么应该没问题。
祝您的权限模型好运。
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |