CakePHPで「Controller does not implement an isAuthorized() method.」の対処法
325 回閲覧されました
みなさんこんにちは、jonioです。
CakePHPであるページにアクセスした時に下記のエラーが表示されました。
App\Controller\ReviewsController does not implement an isAuthorized() method.
解決方法が分かったのでメモとしてこの記事を残します。
CakePHPのバージョン
CakePHPのバージョン3.1.0と4.5.3で確認できたので2つのバージョンの間は有効だと思います。
コントーラーを作成するたびに設定しないといけない
調べた限りですがコントローラーを作成するたびにindexアクション以外のアクションはisAuthorizedメソッドの設定をしないとエラーになります。
isAuthorizedメソッドのコードの書き方は下記になります。
class ReviewsController extends AppController
{
public function isAuthorized() {
return true;
}
//以下はbakeコマンドで自動的に作成されるアクション
これでコントローラー内の全てのアクションに対して適用されます。
4行目の「true」でアクションが許可されるのでページにアクセスできるようになりますが「false」にするとアクセスできなくなります。
ログインした時にアクションを許可する
ChatGPTに質問したのですがコントローラーごとにどのアクションを許可するかの設定は条件(カラムの値が特定の値かとか)を付けないとできないみたいです。
条件を付けて一部のアクションを許可する時のコードの書き方は例えば下記になります。
今回はログインユーザーのroleカラムの値がadminかそうでないかで場合分けをします。
public function isAuthorized($user) {
if ($this->request->getParam('action') == 'add') {
if ($user['role'] == 'admin') {
return true;
}
}
return false;
}
1行目の「$user」はログインしているユーザーの情報です、これはいきなり書いて使うことができます。
2行目の「add」はaddアクションです。
2行目から5行目にかけての流れは「addアクションはログインユーザーの権限がadminなら許可する」という意味です。
こんな感じならコントローラーで一部のアクションを許可することができます。