第11章
第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
  1. 自分のTODOだけ編集できる条件を日本語で書く
  2. 管理者例外を1行で足す