2

ユーザーを作成し、各ユーザーに特定の場所を割り当てることができるスーパー管理者がいます。これは、ユーザーの ID と場所の ID を取得する単純なテーブルに格納されます。

次に、クライアントのテーブルがあります。各クライアントには、loc_id という名前の場所もあります。Gridview で、ユーザーが表示権限を持っている場所に住んでいるクライアントのみを表示できるようにするにはどうすればよいですか (ユーザーは、管轄内のクライアントのデータを操作できる一種の管理者です)。

ユーザーIDを取得します

$userId = \Yii::$app->user->identity->id

次に、彼が表示できる場所を見つけます

$userLocation = Userlocations::find()-where(['user_id' => $userId])->all();

しかし、検索モデルと DataProvider を使用して標準の Gridview にこれを適用し、他のプロパティで GridView をフィルター処理および並べ替えるにはどうすればよいでしょうか?

$searchModel = new AsociatiiSearch();
$dataProvider = $searchModel->search(Yii::$app->request->queryParams);

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

1 に答える 1

1

まず、AsociatiiSearch クラス内に public 属性を追加する必要があります。

class AsociatiiSearch {
    public $userLocation;
    ...

次に、コントローラー アクション内で userLocation を見つけます。

$userId = \Yii::$app->user->identity->id
$userLocation = Userlocations::find()-where(['user_id' => $userId])->all();
$searchModel = new AsociatiiSearch();
$searchModel->userLocation = $userLocation;

$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
return $this->render('index', [
    'searchModel' => $searchModel,
    'dataProvider' => $dataProvider,
]);

最後に、AsociatiiSearch 検索メソッドでは、グローバルな userLocation を使用して別のフィルターを追加できます。

$query->andFilterWhere(['userLocation' => $this->userLocation]);
于 2015-09-28T15:30:41.220 に答える