第11章 · 初心者向け
ログイン・権限制御
「誰か」と「何をしてよいか」は別問題です。順番に押さえます。
1. 認証と認可の違い
認証=あなたは誰? / 認可=それしていい?
たとえ
社員証で入場=認証。会議室を予約できる権限=認可。
2. ログインユーザーとは
今サイトを使っている、ログイン済みの人です。Sessionなどに情報が入っています。
3. ログインユーザー情報の取得
$user = $this->request->getSession()->read('Auth.User');
$userId = $user['id'] ?? null;
4. 未ログイン判定
if (!$this->request->getSession()->check('Auth.User.id')) {
$this->Flash->error('ログインしてください');
return $this->redirect(['controller' => 'Users', 'action' => 'login']);
}
5. 権限とは
「その操作をしてよいか」のルール
例: 一般は自分のTODOだけ。管理者は全部。
6. 一般ユーザー / 管理者
$role = $this->request->getSession()->read('Auth.User.role');
if ($role !== 'admin') {
// 管理者専用ページならここで拒否
}
7. 対象データを操作できるか確認
URLを直打ちされても守れるようにします。
$todo = $this->Todos->get($id);
if ($todo->user_id !== $userId && $role !== 'admin') {
throw new \Cake\Http\Exception\ForbiddenException('権限がありません');
}
8. 権限がない場合の処理
- 403(禁止)を返す
- Flashして一覧へ戻す
- (上級)存在しないように 404 にする
第11章 やってみよう
EXERCISE
- 自分のTODOだけ編集できる条件を日本語で書く
- 管理者例外を1行で足す