2017-05-12 8 views
0

私はYii2に新しいですし、私はuser rightsの3種類があります。GridViewのボタンを更新して削除するにはどうすればいいですか?

Adminmoderatoruserを。私はGridViewを持っていて、UpdateDeleteのボタンをユーザに表示したくないのですが、GridViewだけです。私はどうしたらいいですか?ここで

は私のactionCreate、入力フォームがあるとされています

public function actionCreate() 
{ 
    $model = new Project(); 
    $model->scenario = Project::SCENARIO_CREATE; 

    if ($model->load(Yii::$app->request->post())) { 
     if ($model->save()) { 
      Yii::$app->getSession()->setFlash('success', Yii::t('app', 'Skelbimas sėkmingai pridėtas!')); 
      return $this->redirect(['index']); 
     } 
    } 
    return $this->render('create', [ 
     'model' => $model, 
    ]); 
} 

私はこれに応じて情報を検索しようとしましたが、便利なものを見つけることができませんでした。助けや情報をありがとう。 、それは防ぐことはできません

[ 
    ... 
    'template'=> (user has only user rights ? '{view}' ? '{view} {update} {delete}') 
    ... 
] 

してください、このソリューションは唯一user権を持つユーザーのためのボタンが非表示になりますにもかかわらず、心の中で裸:

答えて

1

これを達成するには、ActionColumクラスの$visibleButtonsプロパティを使用する必要があります。

ので:

'visibleButtons' = [ 
    'update' => Yii::$app->user->can('update'), // or whatever condition 
    'delete' => Yii::$app->user->can('update') 
] 

のように。 visibleButtons配列の各Keyは、ボタンの名前です。

Yii Framework's guide

0

一つの可能​​性は、youeの'template'属性'ActionColumn'等を用いだろうそれらはアクションの更新と削除のアクセスにアクセスするので、コントローラレベルでもアクセス権をチェックする必要があります。

+0

私は2と同じ 'GridViews'を生成する場合、ユーザーは、アクションのURLにアクセスすることができますか? 1つは、私はこれらのボタンを手動で削除し、 'GridView'はユーザーに表示され、他のボタンはすべて管理者に表示されますか? – MKD

+0

コントローラ内のアクセス制御フィルタを設定して、ターゲットコントローラのアクションへのアクセスを許可/禁止する場合は、次のようにします。http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#access-control-フィルタ – dataskills

+0

ボタンは、対応するパラメータとともに、それらのアクションに直接アクセスするだけです。アクションは、ブラウザに直接導入するなど、直接アクセスすることもできます – gmc

0
    ......... 
        [ 
            'class'=>'yii\grid\ActionColumn', 

            'template'=> '{view} {update} {delete} ', 

            'buttons'=> [ 
                'update'=> function($url,$model) { 
if (Yii::$app->user->can('admin')) { 

                    returnHtml::a( '<span class="glyphicon glyphicon-pencil"></span>', $url); 

} 

                }, 

                'delete'=>function($url,$model,$key) { 


if (Yii::$app->user->can('admin')) { 
                        returnHtml::a('delete', $url); 

} 

                }, 

            ], 

        ], 
関連する問題