ThinkPHP6基础授权验证通过Auth库与中间件三步实现:一安装think-auth并配置auth.php;二创建CheckLogin中间件调用Auth::check()做登录拦截;三按路由名或角色做权限校验,敏感操作在控制器内补校验。

ThinkPHP6 添加基础授权验证,核心是用 Auth 认证库 搭配中间件完成登录态识别与权限拦截,不依赖复杂 RBAC 也能快速落地。关键不在装多少包,而在三步到位:装对、绑对、拦对。
一、安装并启用 Auth 扩展
执行命令安装官方推荐的认证扩展:
composer require topthink/think-auth
安装后无需额外注册服务,但需确保配置文件存在:config/auth.php。若无,可复制默认配置(如从扩展文档或 vendor 中提取),至少定义基础参数:
-
'user_model' => \app\model\User::class(指向你的用户模型) -
'user_id' => 'id'(主键字段名) -
'login_time' => 'last_login_time'(可选,用于会话刷新)
二、在中间件中做登录检查
新建中间件 app/middleware/CheckLogin.php,内容简洁直接:
立即学习“PHP免费学习笔记(深入)”;
- 调用
\think\Auth::check()判断是否已登录 - 未登录则重定向到登录页:
return redirect('/login'); - 已登录可选注入用户信息:
$request->withAttribute('user', \think\Auth::user())
然后在 app/middleware.php 的 'http' 数组中注册它,例如放在路由和日志中间件之后、权限中间件之前。
三、按需添加权限校验逻辑
基础授权不一定要上 RBAC。如果只是控制“某类用户能访问某页面”,可在同一中间件或新中间件里加判断:
- 获取当前用户角色:
$user = \think\Auth::user(); $role = $user?->role ?? ''; - 白名单放行:
if (in_array($routeName, ['index/index', 'public/info'])) { return $next($request); } - 角色限制示例:
if ($role !== 'admin' && $routeName === 'admin/dashboard') { abort(403); }
注意:路由名需提前用 ->name('xxx') 显式声明,否则 $request->rule()->getName() 会报错。
四、控制器里做细粒度权限判断(可选)
对敏感操作(如删除、导出),不只靠中间件,还在方法内补一层校验:
if (!\think\Auth::check('user.delete')) { $this->error('无权执行此操作'); }- 权限标识(如
user.delete)需提前在数据库auth_rule表中录入,并通过\think\Auth::setRules()或缓存关联到用户/角色
首次使用时,可手动插入几条测试规则,避免空表导致始终返回 false。



















