2010-02-03 59 views
1

我正在研究一个Web应用程序,其中不同的用户组对 资源有不同的访问权限。到目前为止,我猜想没有什么特别的,但有一个警告; 该应用程序分为“域”,以便我们的每个客户组织 都有自己的内容。在这里,我使用一个更简单的模型来说明我的问题。如何在ACL中表示不同的应用程序域?

每个域都有 相同的资源类型,但每个资源实例仅连接到一个域。 下面是它看起来就像一个域名:

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 

第二种方法的优点是用户可以是一个域的管理员,同时 是另一个编辑器(实际上可能发生)。但它也有缺点 ,角色不是静态的 - 我们需要每次添加或删除域时生成。

这些方法中的任何一种都不错,还是有更好的方法来处理多个域?

回答

0

另一个解决方案可能是子类Zend_Acl,更具体地说,方法'允许'和'拒绝'。

allow($role, $action, $resource, $domain) { 
// parent::allow($role . '-' . $domain, $action, $resource); 
} 

这不是那么简单的,但你的想法。

我不确定你的资源实例是什么意思,但我会建议它:'resource-domain',例如allow('admin','action','story-domain0')。

+0

我已经使用了这个答案的变种;但是不是继承Zend_Acl的子类,而是在另一个调用了Zend_Acl中相应方法的类中创建了具有相同签名的实用程序方法。 – 2010-02-09 10:23:15

相关问题