ThinkPHP 6.15 不支持执行 SQL 文件后直接查看角色权限,需手动导入 rbac.sql 并确认 auth_rule、auth_group、auth_group_access 表存在且数据正确,再通过 Db 查询或 Auth::check() 运行时验证权限。

ThinkPHP 6.15 本身不提供「执行 SQL 文件后直接查看角色权限」的命令或界面功能。它不是数据库管理工具,而是 PHP 框架。所谓“查看角色权限”,实际是查你已建好的 RBAC 表(如 auth_rule、auth_group、auth_group_access)里的数据,而不是解析 SQL 文件内容。
先确认 SQL 文件是否已正确导入
你得先确保 SQL 文件(比如 rbac.sql)已被执行进数据库:
- 用命令行或 phpMyAdmin/Navicat 手动执行该 SQL 文件
- 检查表是否存在:
auth_rule、auth_group、auth_group_access(TP6 默认三张核心表) - 确认
auth_rule.name字段值是合法路由名(如admin/user/list),不是中文或 ID - 确认
auth_group_access中有用户 ID 与角色 ID 的有效关联记录
在代码中查角色权限(推荐方式)
运行时查权限,不能靠看 SQL 文件,而应通过模型或 Db 类查询:
- 查某角色(如 ID=2)拥有的所有权限节点:
Db::name('auth_rule')->whereIn('id', Db::name('auth_group_access')->where('group_id', 2)->column('rule_id'))->select(); - 查某用户(如 ID=100)所属角色及其权限:
Db::name('auth_group')->alias('g')->join('auth_group_access ga', 'g.id = ga.group_id')->join('auth_rule r', 'r.id = ga.rule_id')->where('ga.uid', 100)->field('r.name, r.title, r.type')->select(); - 如果用了自定义模型(如
app\model\AuthRule),可直接调用:
(new AuthRule())->with(['rules' => function ($q) { $q->where('status', 1); }])->select();
用命令行快速验证权限是否加载成功
在项目根目录运行以下命令,检查缓存和基础数据是否就位:
立即学习“PHP免费学习笔记(深入)”;
- 清空权限相关缓存:
php think clear:route && php think clear:cache - 手动测试权限校验(在 tinker 或临时控制器里):
Auth::setUser(1); // 先设用户
dump(Auth::check('admin/user/list')); // 应返回 true 才说明权限已生效 - 若返回 false,重点检查:
–auth_rule.name是否与当前路由规则名完全一致(包括斜杠、大小写、前缀)
–auth_rule.status是否全为 1
–auth_group_access是否有该用户的uid和对应group_id
别依赖 SQL 文件内容做权限判断
SQL 文件只是建表和初始化数据的脚本,它不参与运行时鉴权。权限是否生效,只取决于:
- 数据库中
auth_rule、auth_group、auth_group_access三张表的实时数据 - 登录后是否调用
Auth::setUser($uid) - 中间件是否注册并正确拦截路由(如
admin/*分组绑定rbac中间件) - 缓存是否过期或未更新(改权限后需主动清理
auth_*相关缓存 key)



















