thinkphp6通过角色-用户多对多关系实现用户组授权绑定。需建users、roles、role_user三表,模型定义belongstomany关联,用attach/detach/sync操作绑定,auth权限校验自动遍历用户→角色→权限链路。

一、准备数据库结构
需至少三张表支撑角色-用户绑定:
- users:存储用户基础信息(含 id、username、password 等)
- roles:存储角色信息(如 id、name='管理员'、status=1)
-
role_user:中间表,字段为
role_id和user_id(无主键,联合唯一)
若使用 topthink/think-auth 或 wenhainan/thinkphp6-auth,它们默认适配该结构;自定义模型时确保中间表命名规范(如 Laravel 风格的 snake_case),或在关联定义中显式指定。
二、定义模型关联关系
在 app/model/User.php 中添加角色关联:
public function roles()
{
return $this->belongsToMany(Role::class, 'role_user', 'user_id', 'role_id');
}
同理,在 app/model/Role.php 中定义反向关联:
public function users()
{
return $this->belongsToMany(User::class, 'role_user', 'role_id', 'user_id');
}
这样即可用 $user->roles 获取该用户所有角色,或用 $role->users 查所属用户。
三、绑定用户与角色(增删操作)
绑定不是写死逻辑,而是通过中间表记录维护。常用方式有:
-
批量绑定:调用
$user->roles()->attach([1, 3]),向 role_user 插入 user_id=当前用户ID、role_id 分别为 1 和 3 的两条记录 -
解除绑定:用
$user->roles()->detach([2])删除指定角色关联 -
全量替换:用
$user->roles()->sync([1, 4, 5]),先清空旧绑定,再插入新列表
后台管理中,通常在用户编辑页提供多选角色下拉框,提交后执行 sync() 即可安全更新绑定关系。
四、Auth 权限校验自动识别角色
只要配置正确,Auth 在检查权限时会自动读取用户所绑定的角色及其对应权限。例如:
- 确保
config/auth.php中'auth' => \think\Auth::class(或你实际使用的认证类) - 角色权限数据存于
auth_rules表(或自定义规则表),每条规则关联一个role_id - 调用
\think\Auth::check('edit_article', $userId)时,Auth 会查出该用户所有角色,再查这些角色拥有的所有权限规则,最后判断是否匹配edit_article
无需手动遍历角色——Auth 内部已封装好“用户 → 角色 → 权限”的链路查询逻辑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











