长话短说:为什么 Zend ACL 支持角色之间而不是资源之间的多重继承?
我有一个大的资源树,我希望能够授予权限。过去,我所做的就是创建两棵不同的树。第一个具有树中每种类型的通用资源。第二个具有这些类型的所有实例,以相同的方式排列。这意味着如果您要对树进行超级强加,您会在同一级别上找到相同类型的对象。然后,将每个对象实例设置为将其来自第一棵树的通用对象作为附加父对象。这允许我为每种类型的对象设置默认权限,因此每个实例都将继承它们,而不是我必须定义它们,但仍然为我提供了对每个实例的精细、特定的访问权限。
一个例子:
一个站点有 3 个模块:用户,其中存储用户配置文件和诸如此类的东西。论坛,对当前问题进行热烈讨论 画廊,用户可以上传他们的宠物照片
所以,上面提到的泛型树看起来像这样:
模块 / | \ 用户论坛图库 / | \ 个人资料主题照片 | 邮政
实例树看起来像这样:
模块_1 // / | \ \ 用户 1 用户 2 用户 3 论坛 画廊 1 画廊 2 | | | / \ / \ / \ 个人资料 个人资料 个人资料 sub1 sub2 照片 照片 照片 照片 | / \ 后 1 后 2 后 3
并且在 ACL 中,每个用户对象实例都将从第一棵树中的用户继承。所以默认情况下,我想让所有内容都可读,所以我允许在模块上读取。一切都继承自模块,所以一切都很好。我还希望用户能够编辑他们的个人资料,所以我授予每个用户在他们各自的个人资料上的编辑权限,泛型树在这里没有帮助。假设我的照片画廊是 NSFW,所以我想拒绝阅读它们。通过多重继承,我可以拒绝任何未注册用户的照片读取,这只是一个操作。如果没有多重继承,我必须检查每张照片并拒绝未注册用户的读取权限。如果我有很多照片,这是个坏消息。
有谁知道这样做的方法?它提供了我能想到的最灵活的解决方案。如果您能想到可以使用 Zend_Acl 实现的更好的东西,也请回复!
非常感谢。