CakePHP3でログイン中ユーザーが本人のユーザー情報のみを編集・削除できるように制限

スポンサーリンク
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました

CakePHP で Auth コンポーネント利用時に、Authorization(認可)に関する設定を行う例です。具体的には表題の通り、ユーザー情報の編集・削除(UsersController の edit, delete アクション)を、ログイン中のユーザー本人のみが行えるように制限します。

User のモデル/コントローラーや Auth コンポーネントなどは、CakePHP3入門・開発チュートリアル | EasyRamble で作成・設定したものと同様。

— 環境 —
CakePHP 3.1.1
PHP 5.5.19

スポンサーリンク

isAuthorized() メソッドをオーバーライドしてアクション認可を設定

ユーザー登録(add)、ユーザー一覧表示(index)、ユーザー詳細ページ(view)のアクションは、ログインしていないユーザーを含め誰でもアクセス可能にします。これは UsersController の beforeFilter で $this->Auth->allow() を使って指定する。

また、UsersController の edit, delete アクションをログイン中ユーザー本人のみに許可するには、isAuthorized() メソッドをオーバーライドして行う。edit, delete アクションには、操作対象のユーザー id がパラメーターで渡ってくるので(/users/edit/3 など)、そのユーザー id のパラメーターと現在ログイン中ユーザーの id が等しい場合のみに、isAuthorized() が true を返す(アクションを許可)するようにしました。

src/Controller/UsersController.php

edit, delete アクションの操作対象ユーザー id は…

で取得できる。これをログイン中ユーザーの id($user[‘id’])と比較して、等しい場合には true を返すようにしました(アクションを許可)。これで一応意図した通りの挙動を実現できました。公式ドキュメントを参考にしました。

Authorization (who’s allowed to access what) / Blog Tutorial – Authentication and Authorization – CakePHP Cookbook 3.x documentation

ちょっと情報が少ない感じなのですが、上記リンクの公式ドキュメントの Authorization (who’s allowed to access what) が参考になる。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!