注意:我使用Yii 1.1 在应用程序上,我切换到db auth管理以使用更复杂的auth系统,但现在我无法理解为什么具有父角色的用户未能检查子角色。
if(Yii::app()->user->checkAccess('Administrator')){
Superadmin 用户
失败我会解释自己:
我有3个角色:Normal, Administrator, Superadmin
superadmin有2个子节点,Normal和Administrator,而管理员有1个,Normal。
显然,每个家长都必须能够做他孩子可以做的一切。
以下是Useridentity的代码,其中我指定了角色
...
$this->_id=$myUser->userid;
$this->setState('title', $myUser->access_level);
$auth=Yii::app()->authManager;
if(!$auth->isAssigned($myUser->access_level,$this->_id))
{
if($auth->assign($myUser->access_level,$this->_id))
{
Yii::app()->authManager->save();
}
}
在我的配置中:
'authManager'=>array(
'class'=>'CDbAuthManager',
'defaultRoles'=>array('Normal','Administrator','Superadmin'),
),
更多信息 自动分配表内容: itemname userid bizrule data
Administrator 1 NULL N;
Administrator 8 NULL N;
Normal 2 NULL N;
Superadmin 1 NULL N;
这意味着用户1具有Administrator和Superadmin权限。但checkAccess('Administrator')仍然返回FALSE
答案 0 :(得分:1)
好的,我设法让我的代码正常工作。
我使用NULL规则添加了3个任务:
adminPermissions,superPermissions,normalPermissions
$task=$auth->createTask('adminPermissions','...description',NULL);
$task=$auth->createTask('superPermissions','...description',NULL);
$task=$auth->createTask('normalPermissions','...description',NULL);
然后将它们添加为角色的孩子。 (因为规则是NULL,它永远不会返回TRUE,除非是某事的子项。)
显然最好创建像updatePost或deleteUser这样的任务和操作,但是如果你像我一样开始使用简单的角色并且你使用的是CPhpAuthManager,那么当应用程序已经投入生产时你将能够更改为CDbAuthManager你可以创建你的任务和操作。
在我的应用程序中,我现在检查adminPermissions或superPermissions如下:
if(Yii::app()->user->checkAccess('adminPermissions')){