我想使用 PHP 和 Zend_ACL 创建一个极其灵活的权限系统。我希望能够向特定类型的所有对象以及这些对象的实例分配权限。如果查询对象的特定实例并且资源树中不存在该实例,则可以使用“通用”对象的权限集。我的问题是,这需要嵌套,并且我无法找到一种没有多重继承的方法来做到这一点,而 Zend_ACL 不支持多重继承。
一个例子是这样的。一个包含院系、课程和活动的在线学习网站。每个活动都属于一个课程,每个课程都属于一个教师。我希望能够允许每个教员角色访问所有课程(以及通过继承的活动),但特定教员希望他们的材料私有。因此,我使资源树的结构为每个教师都有一个资源节点,并且每个课程都属于来自教师节点的该教师分支,而不是从通用课程节点分支,通用课程节点为每个课程提供默认权限。使用新结构,我如何应用我的通用课程权限?课程下面的事件也是如此,如果我希望每个事件仅在父课程可读的情况下才可读,但我还想对每个事件应用一组默认的权限,如何组织树以使每个事件继承来自其父级并且它是没有多重继承的通用节点?
非常欢迎对不同系统的任何问题、意见或建议。
您的多重继承问题全在您的脑海中 - 除非当然可以在多个院系中 - 等等。构建一个额外的“父资源”,可以从基础“课程”更改 ACL。
您不希望课程直接继承教师权限;您可能希望有人能够为该学院(助教或其他人)编辑课程,但不是学院本身,对吗?
院系、课程和活动。每个
事件属于一个课程,并且每个
教授课程
Parent -> middleman -> child
Courses -> Courses:Faculty2 -> Courses:Faculty2:Course1
Events -> Events:Course1 -> Events:Course1:Event3
etc
这将为您提供按教师划分的课程组,但仍继承默认课程权限。添加每个资源时,只需将其设为其组资源的父级,而组资源又是整个资源的父级。
如果您希望隐藏特定课程的所有活动 - 您只需在 Event:Course# 上设置权限即可
如果您希望能够对教员的所有活动设置权限,您只需在 Event:Course1 上方添加另一个“中间人”父级,该父级也按教员对活动进行分组:Events:Faculty2:Course1:Event3
我发现对于权限系统,十有八九你不需要(或不想混淆)多重继承。如果您的访问控制比简单的树更复杂,您应该重新评估您的访问控制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)