Zend_Acl模块化类系统

时间:2010-01-08 14:14:44

标签: zend-framework authorization zend-acl

嘿伙计们,我从Zend开始,并尝试了解它的工作方式(到达那里),并且使用Acl类,人们似乎在一个文件中声明所有角色和资源。现在对我来说,如果这个人只是以基本用户身份登录,或者甚至只是网站的访客/访问者,这似乎有点浪费系统资源。所以我在想是否有可能有不同的类设置角色依赖于当前用户的角色/资源。

我目前的想法是在bootstrap中使用switch / case,并根据角色名称加载单个Acl类(例如,'visitor'=>'Model_VisitorAcl','users'=> 'Model_UserAcl'和'admin'=>'Model_AdminAcl'),每个都有一个对应的类文件。然后在类文件中为每个文件做一些事情。这是有效的,目前我可以在一个中定义所有'admin'acls(通过admin-user-visitor的权限heirarchy回溯),然后在'user'中有'user' - 'visitor'角色和资源。

然而,这似乎不是最好的方式,就好像我想要更改'用户'的角色权限我需要为'用户'和'管理员'更改它。这对于2个角色来说不是问题,但在更大的系统上它显然是。

所以我试过像

这样的东西
class Model_AdminAcl extends Zend_Acl{
  function __construct(){
    $d = new Model_UserAcl();

    //defining the admin role and permissions, with inheritance from the roles 
    //set in Model_UserAcl
  }
}

尝试让Model_UserAcl构造函数运行,从而设置角色'user',但这似乎不起作用,抛出“未捕获的异常'Zend_Acl_Role_Registry_Exception',消息'父角色ID'用户'不存在' “ 错误。

那么下一步呢?为每个模块提供单独的包含文件,并根据需要包含所需的类?

或者我是不是只是因为这个问题而在山峦上爬山?

谢谢, PSY

1 个答案:

答案 0 :(得分:0)

好的,解决了这个问题,不知道为什么我没想到会在第一时间尝试这个(我觉得星期五的脑筋疲惫)

我只是将构造函数的内容放入它自己的函数中,然后在构造函数中调用该函数,并使类继承自它下面的类。


//Model/VisitorAcl.php
class Model_VisitorAcl extends Zend_Acl{
  function __construct(){
    $this->addVisitorRules();
  }

  function addVisitorRules(){
    //adding the role and permissions
  }
}

//Model/UserAcl.php
class Model_UserAcl extends Model_VisitorAcl{
  function __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
  }

  function addUserRules(){
    //adding the role and permissions
  }
}

//Model/AdminAcl.php
class Model_AdminAcl extends Model_AdminAcl{
  function __construct(){
    $this->addVisitorRules();
    $this->addUserRules();
    $this->addAdminRules();
  }

  function addAdminRules(){
    //adding the role and permissions
  }
}

如果这不是我应该采取的方式,那么请务必告诉我。

精神科

相关问题