当auth是父级时,Yii user-> checkAccess为false

时间:2015-03-06 08:20:47

标签: php yii

注意:我使用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

1 个答案:

答案 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')){