creonメモ

コーディングやデザインの作業メモなど

【CakePHP3.6】 一覧データをログイン中ユーザーのものに限定したいとき

f:id:iriarj:20200122092743p:plain
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'));
    }