- 更新日: 2016年1月26日
- PHP & CakePHP
CakePHP3でログイン中ユーザーが本人のユーザー情報のみを編集・削除できるように制限
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php namespace App\Controller; use App\Controller\AppController; class UsersController extends AppController { public function beforeFilter(\Cake\Event\Event $event) { $this->Auth->allow(['login']); $this->Auth->allow(['logout']); $this->Auth->allow(['add']); $this->Auth->allow(['index']); $this->Auth->allow(['view']); } public function isAuthorized($user) { // Check that the $user is equal to the current user. $id = $this->request->params['pass'][0]; if ($id == $user['id']) { return true; } return false; } // ... } |
edit, delete アクションの操作対象ユーザー id は…
1 |
$this->request->params['pass'][0]; |
で取得できる。これをログイン中ユーザーの id($user[‘id’])と比較して、等しい場合には true を返すようにしました(アクションを許可)。これで一応意図した通りの挙動を実現できました。公式ドキュメントを参考にしました。
ちょっと情報が少ない感じなのですが、上記リンクの公式ドキュメントの Authorization (who’s allowed to access what) が参考になる。
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
Leave Your Message!