Yii:正确使用授权层次结构
我试图验证属于公司的用户是否可以查看属于公司的项目…换句话说,如果他们是员工,他们应该能够查看公司的项目 我试图遵循这里提供的示例: 这是我生成的代码(运行一次): 这是main.php中的代码:Yii:正确使用授权层次结构,yii,Yii,我试图验证属于公司的用户是否可以查看属于公司的项目…换句话说,如果他们是员工,他们应该能够查看公司的项目 我试图遵循这里提供的示例: 这是我生成的代码(运行一次): 这是main.php中的代码: 'authManager'=>array( 'class'=>'CDbAuthManager', 'connectionID'=>'db', 这是我的控制器中使用的授权件: if (Yii::app()->user->c
'authManager'=>array(
'class'=>'CDbAuthManager',
'connectionID'=>'db',
这是我的控制器中使用的授权件:
if (Yii::app()->user->checkAccess('companyOwnedItem',array('item'=>$item))) {
echo 'YES';
} else echo 'NO';
if (Yii::app()->user->checkAccess('companyOwnedItem',array('item'=>$item))) {
echo 'YES';
} else {echo 'NO';}
我总是在屏幕上看到“不”
但是,如果我使用此代码:
if (User::model()->findByPk(Yii::app()->user->getId())->company->id==$item->company->id)
然后我在屏幕上看到“是”。我做错了什么?如何使用Yii的内置authManager使其工作?最好的猜测是items数组中的项工作不正常。您是否已打开身份验证管理器的调试?忘记了该属性,但在出现bizRule错误的情况下,可以打开一个属性
除此之外,它看起来是正确的。另外,仅供参考,在Yii 1.1.11之后,有一个$param['userId']选项,这样您就不需要查找当前用户的ID。我使用了以下选项,它起到了作用: 在我的配置中:
'authManager'=>array(
'class'=>'CDbAuthManager',
'connectionID'=>'db',
'defaultRoles'=>array('authenticated'),
'showErrors'=>true,
),
我的authManager代码:
$auth=Yii::app()->authManager;
$bizRule = 'return User::model()->findByPk(Yii::app()->user->getId())->company->id==$params["item"]->company->id;';
$auth->createOperation('companyOwnedItem','view a company-owned item',$bizRule);
$role = $auth->createRole('authenticated');
$role->addChild('companyOwnedItem');
然后在我的控制器中:
if (Yii::app()->user->checkAccess('companyOwnedItem',array('item'=>$item))) {
echo 'YES';
} else echo 'NO';
if (Yii::app()->user->checkAccess('companyOwnedItem',array('item'=>$item))) {
echo 'YES';
} else {echo 'NO';}
现在它可以工作了 这让我更接近了一步,我在我的bizrule末尾缺少了一个分号<代码>$bizRule='return User::model()->findByPk(Yii::app()->User->getId())->company->id=$params[“item”]->company->id;'代码>但仍无法验证。可能是我定义的角色不正确吗?它在eval()中运行结果,因此可能值得设置所有内容并以这种方式进行检查。或者,如果您有Xdebug和PHP调试器,如果您只需一步一步地完成,那么查看事情是如何设置的/它们是如何工作的将非常有帮助。我使用的是PhpStorm,效果很好。您建议在我的authManager配置中添加
showErrors=>true
,这有助于我测试是否应用了bizRule,但我发布了一个有效的解决方案。谢谢你的建议。