0

我正在尝试验证属于公司的用户是否可以查看属于公司的项目......换句话说,如果他们是员工,他们应该能够查看公司的项目。

我正在尝试遵循此处提供的示例: 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 使其工作?

4

2 回答 2

1

最好的猜测是 items 数组中的项目无法正常工作。您是否为您的身份验证管理器打开了调试?忘记了属性,但是有一个可以打开以防 bizRule 错误。

除此之外,它看起来是正确的。另外,仅供参考,在 Yii 1.1.11 之后,有一个 $param['userId'] 选项,因此您无需查找当前用户的 ID。

于 2012-09-20T23:05:26.080 回答
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';}

它现在有效!

于 2012-09-21T21:07:30.223 回答