嘿伙计们,我从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
答案 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 } }
如果这不是我应该采取的方式,那么请务必告诉我。
精神科