Как управлять видимостью кнопок в ActionColumn yii2 GridView при использовании yii2 RBAC с классом правил?
Я понимаю, что видимость кнопок ActionColumn можно контролировать следующим образом:
<?= 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')
]
],
],
]);
?>
Я создал авторизацию RBAC и класс правил AuthorRule на основе документов yii2.
http://www.yiiframework.com/doc-2.0/guide-security-authorization.html
В случае roleParams я добился этого, как показано ниже (в представлении шаблона):
if (\Yii::$app->user->can('updatePost', ['post' =>$model]){
//if the post is created by current user then do this
}
Как выяснить идентификатор модели или по крайней мере в виджете GridView, чтобы я мог сделать что-то вроде:
'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)])
]
Моя конечная цель заключается в том, что для пользователя с ролью автора кнопки обновления и удаления видны только в том случае, если сообщение было создано этим пользователем. Любые другие идеи также приветствуются для достижения этой цели.
Спасибо!
1 ответ
Решение
Вы можете сделать то же самое с visibleButtons:
'visibleButtons' => [
'update' => function ($model) {
return \Yii::$app->user->can('updatePost', ['post' => $model]);
},
'delete' => function ($model) {
return \Yii::$app->user->can('updatePost', ['post' => $model]);
},
]