2010-01-08 80 views
0

嘿,我从Zend开始,试图理解它的工作方式(到达那里)以及Acl类,人们似乎将所有角色和资源声明在一个文件中。现在对我来说,如果这个人只是以一个基本用户的身份登录,或者甚至只是该网站的访客/访问者,这似乎有点浪费系统资源。所以我在想是否有可能设置不同的类,这些类将角色设置为当前用户的角色/资源。我现在的想法是在引导中使用switch/case中的角色,并根据角色名称加载各个Acl类(例如,'visitor'=>'Model_VisitorAcl','users'=>' Model_UserAcl'和'admin'=>'Model_AdminAcl'),每个都有相应的类文件。然后在课堂文件中为每个文件做一些事情。这是行得通的,目前我可以将所有的'admin'acls定义为一个(通过admin-user-visitor的权限级别进行回溯),然后在'用户'中有'用户' - '访问者'角色和资源。Zend_Acl模块化类系统

但是,这似乎并不是最好的方式,就好像我想改变'user'的角色权限一样,我需要将它改为'user'和'admin'。这对于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构造函数运行,从而设置角色“用户”,但是这似乎并没有工作,抛出“未捕获的异常‘Zend_Acl_Role_Registry_Exception’带有'父角色ID'用户'消息不存在'消息'“ 错误。

那么下一步呢?对每个模块有单独的包含文件,并且具有所需的类包括它们根据需要?

还是我只是在这个问题上从山麓山上出山?

感谢, 精神科

回答

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 
    } 
} 

如果这不是我应该去做的事情,那么请务必让我知道。

Psy