Security 调整此安全系统以处理多重继承的最佳方式是什么?
系上安全带,这是个棘手的问题 我们有一个处理大数据集的系统。(每个大表有百万到十亿条记录)。所有数据都在节点的树结构中处理 我们正在使用Symfony2和Symfony2安全系统(域对象、ACL、ACE等)。我们的Acl树镜像了我们的节点树 要创造某种语言:Security 调整此安全系统以处理多重继承的最佳方式是什么?,security,tree,symfony,theory,Security,Tree,Symfony,Theory,系上安全带,这是个棘手的问题 我们有一个处理大数据集的系统。(每个大表有百万到十亿条记录)。所有数据都在节点的树结构中处理 我们正在使用Symfony2和Symfony2安全系统(域对象、ACL、ACE等)。我们的Acl树镜像了我们的节点树 要创造某种语言: DP定义的权限,即此acl节点上的ace记录 EP有效权限,无ace记录,从具有DP 就业务逻辑而言,我们为每个用户分配0或1个ace给一个对象,并在没有ace的情况下依赖继承根目录>lvl1(DP:VIEW)>lvl2>lvl3(EP
定义的权限,即此acl节点上的ace记录DP
有效权限,无ace记录,从具有EP
DP
Leaf < Parent < GrandParent < Root
Leaf < AssociatedNode < AssociatedNodeParent < AssociatedNodeGrandParent < Root
...
Leaf
或者管理ACE投票的逻辑很好,但我们不确定的是如何表示树上的多条路径。我们目前(读作:坏)的想法是:
- acl树中的多父行为
- 专业人士
- 看起来更干净
- 缺点
- 几乎整个安全系统的重写都是为了把这个放进去
- 潜在的老鼠刺
- 专业人士
- 针对实体复制对象标识/ACL,指定不同的父对象。
- 专业人士
- 呃
- 缺点
- 将潜在地创建大量acl记录
- 在代码中很难管理
- 专业人士
O(n)
(如果搜索数据库索引中的每个节点)下降到O(log n)
这里很难获得O(1)
遍历的原因是节点网络保证了循环的可能性。但是,如果您构建一个ACL图来维护(例如)min heap的属性,您应该可以
祝您的权限模型好运。同样,正如前面提到的,这是一个有趣但不平凡的问题——谢谢!现在我知道我该如何度过这个周末:-我可能会考虑堆的想法,但我会把它变成一个线程堆。如果愿意,堆中的每个节点都包含一个指向ACL“索引”的指针 假设示例中只有三个节点(R(oot)、p(are)和N(ode))。因此,为N设置的ACL是ACL(R)+ACL(P)+ACL(N)。假设创建节点时,该节点包含指向节点索引的指针X。所以R(X)=acl索引(R)。没有节点本身实际包含其ACL 现在,对于给定的节点N,在最坏的情况下,我仍然必须从根开始追踪,但我只是在一个平面索引周围跳跃来完成,而不是在整个树上跳跃。如果您可以断言,对于给定的节点N,只有一条到N的路径,或者,如果有多条路径,N保留另一个遍历表,这样,对于N,来自节点a的路径(N)在该表中被侦听,则会更好。实际上,当节点连接到面包屑时,必须将面包屑保留在N中 我想知道我们是否可以借用地理定位的概念。这是不可能的,你的小手持式GPS保持所有可能的最短路径路线从任何一点到任何一点,并保持交通时间铭记在心。它欺骗地图并将其划分为“分幅”,因为您不能同时在整个地图上,但是,您仅限于当前所在的分幅,它只需要计算从该分幅内到其已知存在的最短路径。一旦您退出,它将加载该磁贴并重复。实际上,我们使用局部性原则来缩小范围
如果我们用同样的想法呢?对于给定节点,如果将访问树划分为“碎片”,则可以预先计算成本或至少更新成本,然后从R到N的路径成本就是碎片成本加上本地碎片中的路径成本之和 恐怕我对你的问题没有答案,但如果你把它整理好,我会非常感兴趣地阅读你是如何做到的:-)我没有从你的问题中得到的是为什么每个节点都没有获得权限(例如,从父节点继承来的权限?)。更重要的是,为什么首先需要通过ACL的不同路径?你的用例是什么?大多数情况下,我认为只要你查看用例而不是问题的技术解决方案,答案就很简单了。你能澄清一下“我们为一个对象分配了0或1张ace”吗?
0
是指“明确的否定许可”还是“缺乏(肯定的)许可”?