2010-06-09 21 views

Répondre

7

Il est très difficile de dire ce que vous essayez de faire ou ce que le problème est, mais j'utiliser « {} » et des guillemets doubles plutôt que des guillemets simples lors de la construction de votre choix afin que sont interprétées vos variables correctement:

 

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

 
2

Vous pouvez utiliser

array('allow', 
      'actions'=>array('update'), 
      'users'=>array(Yii::app()->user->name), 
      'expression' => '(Yii::app()->user->id == ($_GET[\'id\']))', 
        ), 
0

Vous pouvez créer une fonction dans le contrôleur courant et l'appeler dans l'expression elle-même.

Un exemple avec un billet de blog:

Mettre cette fonction dans le contrôleur actuel où vos règles d'accès sont.

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

Et dans la section accessRules, vous faites ceci:

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

espoir qui aide.

+0

ne devons-nous pas spécifier le nom des contrôleurs? –

+0

votre solution ne fonctionne pas –

0

Depuis PHP 5.3 peut utiliser une fonction anonyme au lieu de code dans une chaîne

... 
'expression' => function ($user) { 
    return $user->... == ...; 
}, 
... 
1
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; 
} 

dans ce code en fonction findByPk $ _GET [ 'post_id'] cette valeur où, en obtiendra