使用
PHP和Zend_ACL,我想创建一个非常灵活的权限系统.我希望能够为特定类型的所有对象以及这些对象的实例分配权限.如果查询对象的特定实例并且资源树中不存在该对象,则可以使用“通用”对象的权限集.我的问题是,这需要嵌套,我无法找到一种方法来做到没有多重继承,Zend_ACL不支持.
一个例子就是这样.一个有学院,课程和活动的在线学习网站.每个活动都属于一门课程,每门课程都属于一个教师.我希望能够允许每个教师角色访问所有课程(和继承的事件),但特定教师希望他们的材料是私人的.因此,我使我的资源树的结构具有每个教师的资源节点,并且每个课程都属于教师节点的教师分支,而不是从通用课程节点分支,这为每个课程提供了默认权限.使用新结构,我如何应用我的通用课程权限?对于课程下面的事件也是如此,如果我希望每个事件只有在父课程可读时才可读,但我还想对每个事件应用一组默认权限,我如何组织树以使每个事件继承从它的父和它的通用节点没有多重继承?
对于不同系统的任何问题或意见或建议都是非常受欢迎的.
最佳答案 您的多重继承问题在您的脑海中 – 除非当然可以在多个院系中 – 等等.构建一个额外的“父资源”,可以从基础“课程”中更改ACL.
您不希望课程直接继承教师权限;你可能希望有人能够编辑该教师的课程(TA或其他东西) – 但教师本身不是吗?
faculties, courses, and events. Each
event belongs to a course, and each
course to a faculty
Parent -> middleman -> child
Courses -> Courses:Faculty2 -> Courses:Faculty2:Course1
Events -> Events:Course1 -> Events:Course1:Event3
等等
这将为教师提供课程组,但仍继承默认课程权限.当您添加每个资源时 – 只需将其作为其资源的父资源,该资源是整个资源的父资源.
如果您希望隐藏特定课程的所有活动 – 您只需在活动上设置权限:课程#
如果您希望能够为教师的所有事件设置权限,您可以在事件:Course1上面添加另一个“中间人”父母,该课程也按教师分组事件:事件:教师2:课程1:事件3
我找到了10个权限系统,你不需要(或想要混淆)多重继承.如果您的访问控制比简单树更复杂,则应重新评估访问控制.