thinkphp5.0路由分组授权必须显式调用middleware()绑定鉴权中间件,否则无权限控制;中间件需提前注册,handle方法须返回response或$next($request),参数应通过$request->param()获取,权限标识建议在路由option中声明。

ThinkPHP5.0添加路由分组授权,核心不是“自动生效”,而是必须显式将鉴权中间件绑定到分组对象上。路由分组本身不带任何权限逻辑,哪怕路径写成 /admin/xxx,也不拦未登录访问。
必须链式调用 middleware() 绑定中间件
授权控制要落在分组定义的末尾,用 ->middleware() 显式挂载。不能写在闭包里,也不能只给某条子路由加。
- ✅ 正确写法:整个 admin 分组统一受控
Route::get('user/list', 'Admin/User/list');
Route::post('user/delete', 'Admin/User/delete');
})->middleware('check_auth');
- ❌ 错误写法:中间件只作用于最后一条路由,或语法报错
Route::get('user/list', 'Admin/User/list');
Route::post('user/delete', 'Admin/User/delete')->middleware('check_auth'); // 仅对 delete 生效
});
中间件需提前注册且 handle 方法返回明确响应
中间件类(如 app/middleware/CheckAuth.php)必须已注册,且 handle() 方法中:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 校验失败时,直接返回
redirect('/login')或json(['code'=>401])等 Response 对象,请求立即终止 - 校验通过时,必须返回
$next($request),否则后续流程不执行 - 别用
$request->route()->param('id')取参数——此时路由尚未解析完成,应改用$request->param('id')
权限码建议按路由显式声明,而非靠控制器方法推导
避免用 $this->request->action() 拼权限,容易跨路由复用冲突。推荐在路由定义时绑定动作级权限标识:
- 例如:
Route::post('admin/article/delete', 'ArticleController@delete')->option(['permission' => 'article:delete']); - 中间件中读取该标识,查缓存或数据库判断当前用户是否拥有
article:delete - 数据库表
auth_rule.rule_code必须唯一索引,值为纯英文+冒号格式,如user:edit、order:export
嵌套分组注意中间件执行顺序
若存在 api 和 api/v2 两层分组,且都绑了 auth 中间件,实际执行是「外层先入、内层后入、内层先出」。权限叠加逻辑要按这个栈序设计,比如日志记录或限流计数容易错位。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










