サイバーセキュリティを勉強していく漢

cakephp4の認証、承認について

AuthenticationAuthorizationcakephp4IdentityInterfacepolicy

自分なりのまとめ

cakephp4になって

バージョン 4.0.0 で非推奨: AuthComponent は 4.0.0 では非推奨になり、 authorization と authentication プラグインに 置き換えられます。

https://book.cakephp.org/3/ja/controllers/components/authentication.html

らしい。

だいたいは公式ドキュメント通りにやってたが、迷ったところを抜粋してメモ

Authenticationを適用しない場合

アプリケーション全体 => src/Controller/AppController.phpに

コントローラ毎 => 各コントローラに

public function beforeFilter(\Cake\Event\EventInterface $event)
{
    parent::beforeFilter($event);
    $this->Authentication->addUnauthenticatedActions(["認証を適用しないアクション名", "複数可能"]);
}

Authorizationを適用しない場合

各アクションで(例・index)

public fucntion index()
{
    $this->Authorization->skipAuthorization();
}

Policy

Bake時に複数形で作成したから結構詰まってしまった

単数形で記述

canAdd() とかcanIndex() とは、そのモデルのコントローラのアクションに対応したPolicyを作成。

Topアクションとか作ってcanTopポリシーとかでもできた。

IdentityInterface

ユーザを管理するモデルのEntity(/src/Model/Entity)に記述することで、PolicyのIdentityInterfaceの$userと対応

  (例:usersモデル)

//略
use Authentication\IdentityInterface;

class User extends Entity implements IdentityInterface
{
    protected $_accessible = [
        //略
    ];
    
    //略
    /*
     * 公式ドキュメントで使用されていたgetIdentifier()のもとはこれ
     * 素直にusersモデルを使用していなかったから、わざわざ書かなきゃだめだった?
     */
    public function getIdentifier()
    {
        return $this->users_id;
    }

    public function getOriginalData()
    {
        return $this;
    }
}

上記がPolicyのIdentityInterface $userの正体だった。なるへそ