Yii2 - 基于 RBAC 的 dataProvider 查询过滤器

问题描述

使用基于 RBAC 角色的过滤器进行查询的最佳方法是什么。

目标:每个用户角色看到不同的结果。

最好创建一系列“ifs”,或者有其他好的组织吗?

auth_item

id     |  name           
-------+---------
1      |  boss    
2      |  chef 
3      |  employe

contacts

id     |    name     |  id_department |  contact            
-------+-------------+----------------+-------------
1      |    John     |       2        | 999 999 999   
2      |    Angela   |       4        | 999 452 998 
3      |    Bea      |       5        | 999 678 997 
4      |    Monique  |       4        | 999 125 923

我当前的代码

public function actionIndex()
{
    $searchModel = new Contacts();
    $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

    if (\Yii::$app->user->can('employe')) {

        $dataProvider->query->andFilterWhere(['id_department' => 4]);
    } elseif (\Yii::$app->user->can('chef')) {
        $dataProvider->query->andFilterWhere(['id_department' => 2]);
    } elseif (\Yii::$app->user->can('boss')) {
        $dataProvider->query->andFilterWhere(['IN','id_department',[1,2,3,4,5]]); //all results
    }

    return $this->render('index',[
        'searchModel' => $searchModel,'dataProvider' => $dataProvider,]);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)