Yiiのフレームワークコントローラにアクセスルール式に引数を渡す方法

StackOverflow https://stackoverflow.com/questions/3005708

  •  25-09-2019
  •  | 
  •  

質問

OW accessRulesのexperessionsに引数を渡します コードは以下の式が評価されているクラスで定義されていない$ OWNER_ID becouse仕事をしません。それを修正するためにどのように任意のアイデア?

public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
        array('allow', 
                'actions'=>array('update'),
                'expression'=>'$user->id==$owner_id',
));
}
役に立ちましたか?

解決

それはあなたが何をしようとしているか、どのような問題があると言うことは非常に難しいのですが、私は使用することになり、「{}」と、二重引用符ではなく単一引用符は、あなたの変数が正しく解釈されるように、あなたのアレイを構築する際に:


public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
        array('allow', 
                'actions'=>array('update'),
                'expression'=>"{$user->id}=={$owner_id}",
));
}


他のヒント

あなたが使用することができます。

 array('allow',
            'actions'=>array('update'),
            'users'=>array(Yii::app()->user->name),
            'expression' => '(Yii::app()->user->id == ($_GET[\'id\']))',
                    ),
function isPostOwner() {
        $post = Post::model()->findByPk($_GET['post_id']);
        $owner_id = $post->owner_id;
        if(Yii::app()->user->id === $owner_id)
            return true;
        return false;
}

FindBYPK関数$ _GET [ 'post_idの']から、この値では、このコードでで取得します。

あなたは現在のコントローラ内の関数を作成して、式自体でそれを呼び出すことができます。

ブログ記事で例:

あなたのアクセスルールがあり、現在のコントローラでこの機能を入れています。

function isPostOwner() {
        $post = Post::model()->findByPk($_GET['post_id']);
        $owner_id = $post->owner_id;
        if(Yii::app()->user->id === $owner_id)
            return true;
        return false;
}

そしてaccessRulesセクションでは、あなたがこれを行う:

public function accessRules(){
        return array(
        ...
                array('allow', 
                        'actions'=>array('update'),
                        'expression'=>"Yii::app()->controller->isPostOwner()",
        ));
}

希望に役立ちます。

PHP 5.3から1のストリングに代えてコードの匿名関数を使用することができる

...
'expression' => function ($user) {
  return $user->... == ...;
},
...
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top