【CakePHP3.6】 一覧データをログイン中ユーザーのものに限定したいとき
自分用メモです。
個別のユーザーがusersテーブルに登録されていて、bookmarksテーブルがuser_idを持つ形で紐づいている場合
bakeしたコード↓
/** * Index method * * @return \Cake\Http\Response|void */ public function index() { $this->paginate = [ 'contain' => ['Users'] ]; $bookmarks = $this->paginate($this->Bookmarks); $this->set(compact('bookmarks')); }
↑これを↓のようにすると、ログイン中ユーザーのidに紐づく一覧データのみを表示します。
/** * Index method * * @return \Cake\Http\Response|void */ public function index() { $this->paginate = [ 'contain' => ['Users'], 'conditions' => ['user_id' => $this->Auth->user('id')], ]; $bookmarks = $this->paginate($this->Bookmarks); $this->set(compact('bookmarks')); }
↑これを更に↓のようにconditionsを設定すると、特定のユーザーのときはユーザー自身の一覧のみ、それ以外は全ユーザーの一覧が表示されます。
/** * Index method * * @return \Cake\Http\Response|void */ public function index() { $this->paginate = [ 'contain' => ['Users'] ]; // 一般ユーザーのときは表示する一覧データをユーザー自身のものに限定する if ($this->Auth->user('role') === 0) // 適宜、一般ユーザー判定など { $this->paginate['conditions'] = [ 'user_id' => $this->Auth->user('id') ]; } $bookmarks = $this->paginate($this->Bookmarks); $this->set(compact('bookmarks')); }