CakePHP 4 Authentication插件如何放行所有请求仅限制Admin目录访问
解决方案
你可以直接在全局根控制器AppController的beforeFilter中通过路由前缀判断实现需求,不需要逐个配置控制器动作,改动量极小:
步骤1:修改全局AppController配置
打开src/Controller/AppController.php,替换原有beforeFilter逻辑:
public function beforeFilter(\Cake\Event\EventInterface $event) { parent::beforeFilter($event); // 取当前请求的路由前缀 $currentPrefix = $this->request->getParam('prefix'); // 非Admin前缀的所有请求全部放行,跳过鉴权 if ($currentPrefix !== 'Admin') { $this->Authentication->allowUnauthenticated(['*']); } }
传入['*']就代表放行当前控制器的所有动作,不需要逐个指定。
步骤2(可选):配置Admin前缀专属逻辑
你可以单独创建Admin目录下的基控制器src/Controller/Admin/AppController.php,作为所有Admin后台控制器的父类,单独处理后台的鉴权例外(比如登录、忘记密码页不需要鉴权):
namespace App\Controller\Admin; use Cake\Controller\Controller; use Cake\Event\EventInterface; class AppController extends Controller { public function beforeFilter(EventInterface $event) { parent::beforeFilter($event); // 单独配置Admin下不需要鉴权的动作 $this->Authentication->allowUnauthenticated(['login', 'forgetPassword']); } }
所有Admin下的控制器继承这个基控制器即可,最终就能实现:非Admin路由全部公开访问,Admin下仅你指定的公开动作可免登录访问,其余后台资源全部需要鉴权。
内容的提问来源于stack exchange,提问作者AlphaOmega
相关产品推荐
相关产品推荐

