我正在开发一个 Web 应用程序,其中不同的用户组对资源具有不同的访问权限。到目前为止,我猜没有什么特别的,但有一个警告;该应用程序被划分为“域”,因此我们的每个客户组织都有自己的内容。在这里,我使用一个更简单的模型来说明我的问题。
每个域具有相同的资源类型,但每个资源实例仅连接到一个域。这是一个域的样子:
Resources: stories, announcements
Roles:
guest // read only access
root // unlimited access
editor // like guest, but with r/w access to resource "stories"
admin // r/w access to both resources
我提出了两种不同的方法来使用 Zend_Acl 实现这一点,第一种是简单地为不同的域使用不同的 ACL,为每个域复制上述内容。第二种是仅使用一个 ACL 并为每个域添加新角色:
Domains: domain0, domain1, domain2
Roles:
guest
root
editor-domain0
editor-domain1
editor-domain2
admin-domain0
admin-domain1
admin-domain2
第二种方法的优点是用户可以是一个域的管理员,同时是另一个域的编辑器(实际上可能会发生)。但它也有一个缺点,即角色不是静态的——我们每次添加或删除域时都需要生成。
这些方法中的任何一种都有用,还是有更好的方法来处理多个域?