我正在尝试验证属于公司的用户是否可以查看属于公司的项目...换句话说,如果他们是员工,他们应该能够查看公司的项目。< / p>
我正在尝试按照此处提供的示例: http://www.yiiframework.com/doc/guide/1.1/en/topics.auth
这是我生成的代码(运行一次):
$auth=Yii::app()->authManager;
$auth->createOperation('viewItem','view an item');
$bizRule = 'return User::model()->findByPk(Yii::app()->user->getId())->company->id==$params["item"]->company->id';
$task=$auth->createTask('companyOwnedItem','view a company-owned item',$bizRule);
$task->addChild('viewItem');
这是main.php中的代码:
'authManager'=>array(
'class'=>'CDbAuthManager',
'connectionID'=>'db',
这是我的控制器中使用的授权部分:
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使其工作?
答案 0 :(得分:1)
最好的猜测是items数组中的项目无法正常工作。你打开了auth管理器的调试吗?忘了财产,但有一个在bizRule错误的情况下打开。
除此之外,它看起来是正确的。此外,仅在Yii 1.1.11之后,有一个$ param ['userId']选项,因此您无需查找当前用户的ID。
答案 1 :(得分:0)
我最终使用了以下内容并且有效:
在我的配置中:
'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';}
它现在有效!