2017-11-24 4 views
1

Ich verstehe die Sichtbarkeit von ActionColumn Tasten kann so gesteuert werden:Wie kann ich die Sichtbarkeit von Schaltflächen in ActionColumn von yii2 GridView steuern, wenn yii2 RBAC mit einer Regelklasse verwendet wird?

<?= GridView::widget([ 
     'dataProvider' => $dataProvider, 
     'filterModel' => $searchModel, 
     'columns' => [ 
      ['class' => 'yii\grid\SerialColumn'], 

      'id', 
      'title', 
      'body:ntext', 

      // ['class' => 'yii\grid\ActionColumn'], 
      [ 
      'class' => 'yii\grid\ActionColumn', 
      'visibleButtons' => 
      [ 
       'update' => Yii::$app->user->can('updatePost'), 
       'delete' => Yii::$app->user->can('updatePost') 
      ] 

      ], 
     ], 
    ]); 
?> 

Ich habe auf yii2 docs
http://www.yiiframework.com/doc-2.0/guide-security-authorization.html

Bei roleParams Basis geschaffen RBAC Autorisierung und eine AuthorRule Regel Klasse I haben (im Hinblick auf Vorlage) dies wie unten erreicht:

if (\Yii::$app->user->can('updatePost', ['post' =>$model]){ 
//if the post is created by current user then do this 
} 

Wie das Modell, um herauszufinden, oder atleast id in Gridview-Widget, um mich so etwas wie:

'visibleButtons' => 
    [ 
     'update' => Yii::$app->user->can('updatePost',['post' => \app\models\Post::findOne($howToGetThisId)]), 
     'delete' => Yii::$app->user->can('updatePost',['post' => \app\models\Post::findOne($howToGetThisId)]) 
    ] 

Mein Endziel ist hier, dass für einen Benutzer mit Autor Rolle, aktualisieren und löschen Tasten sind nur sichtbar, wenn der Beitrag von diesem Benutzer erstellt wurde. Andere Ideen sind ebenfalls willkommen, um dies zu erreichen.

Vielen Dank!

Antwort

0

Sie können auch tun mit visibleButtons:

'visibleButtons' => [ 
    'update' => function ($model) { 
     return \Yii::$app->user->can('updatePost', ['post' => $model]; 
    }, 
    'delete' => function ($model) { 
     return \Yii::$app->user->can('updatePost', ['post' => $model]; 
    }, 
]