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';

画面にはいつも「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 以降では、現在のユーザーの ID を調べる必要がないように $param['userId'] オプションがあります。

于 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 に答える