🔐 系统权限管理
ThinkAdmin v6 的权限管理基于简化的 RBAC 模型,并加入了注解权限配置。权限控制能够精确到按钮级别,为使用者提供了更大的灵活性。
🚀 权限管理特点
核心特性
- 简化流程: 整合了功能节点、权限管理、菜单管理和用户管理
- 自动维护: 功能节点由系统自动维护,根据控制器代码注释进行刷新
- 注解配置: 只需添加标准的块注释即可加入权限控制
- 精确控制: 权限控制精确到按钮级别
技术优势
- 基于RBAC: 基于角色访问控制模型
- 注解驱动: 通过注解自动生成权限节点
- 细粒度控制: 支持到按钮级别的权限控制
- 动态管理: 支持动态权限配置和管理
权限管理流程
- 功能节点: 系统根据控制器注释自动生成
- 权限配置: 在后台配置权限与功能节点的关联
- 用户授权: 为用户分配相应的权限
- 菜单管理: 根据权限控制菜单显示
注解规则
基础注解说明
注解规则案例如下,@auth
优先级高于 @login
配置,通常只需要配置 @auth
即可添加到后台权限配置。
/**
* 用户列表页面
* @auth true # 表示需要验证权限
* @menu true # 添加系统菜单节点
* @login true # 强制登录才可访问
*/
public function index(){
// 用户列表逻辑
}
/**
* 添加用户
* @auth true
* @menu true
*/
public function add(){
// 添加用户逻辑
}
/**
* 删除用户
* @auth true
*/
public function remove(){
// 删除用户逻辑
}
注解参数详解
注解 | 说明 | 示例 | 效果 |
---|---|---|---|
@auth true | 需要权限验证 | @auth true | 访问需要配置授权才能访问 |
@menu true | 添加到菜单 | @menu true | 在编辑菜单时自动提示节点可选项 |
@login true | 强制登录 | @login true | 强制需要登录才能访问该操作 |
实际应用案例
让我们看一个完整的用户管理模块权限配置:
<?php
namespace app\admin\controller;
use think\admin\Controller;
class UserController extends Controller
{
/**
* 用户列表 - 需要权限验证,显示在菜单中
* @auth true
* @menu true
*/
public function index()
{
$this->title = '用户管理';
// 用户列表逻辑
}
/**
* 添加用户 - 需要权限验证,显示在菜单中
* @auth true
* @menu true
*/
public function add()
{
$this->title = '添加用户';
// 添加用户逻辑
}
/**
* 编辑用户 - 需要权限验证,显示在菜单中
* @auth true
* @menu true
*/
public function edit()
{
$this->title = '编辑用户';
// 编辑用户逻辑
}
/**
* 删除用户 - 需要权限验证,但不显示在菜单中
* @auth true
*/
public function remove()
{
// 删除用户逻辑
}
/**
* 用户详情 - 需要登录,不需要权限验证
* @login true
*/
public function detail()
{
// 用户详情逻辑
}
/**
* 公开页面 - 不需要任何验证
*/
public function public()
{
// 公开页面逻辑
}
}
权限节点生成规则
系统会根据控制器和方法名自动生成权限节点:
- 控制器:
UserController
→user
- 方法:
index
→user/index
- 完整节点:
admin/user/index
节点命名示例:
admin/user/index
- 用户列表admin/user/add
- 添加用户admin/user/edit
- 编辑用户admin/user/remove
- 删除用户
权限管理
创建权限后,接下来是为权限配置可访问的功能节点。例如,若权限A
仅允许访问特定的功能节点,您需要在配置中勾选这些节点。
在配置授权时,若需展示应用名称,请前往 config/app.php
文件设置 app_names
的应用名称。请注意,这些名称在显示前会经过 lang()
函数进行语言转换处理,确保在不同语言环境下均能正确显示。
若您不希望某个应用受到后台权限控制,可以通过配置 rbac_ignore
选项来实现。这样,您就可以更灵活地管理不同应用的权限设置。
return [
// ...
// 其他参数未显示
'app_names' => [
'admin' => '系统管理',
'wechat' => '微信管理',
'plugin-account' => '账号管理'
],
// 忽略 RBAC 权限检查,可以配置多个应用
'rbac_ignore' => [ 'index', 'wap', 'api' ],
// 配置 RBAC 登录地址,通常不需要配置
'rbac_login' => ''
];
权限配置截图
菜单管理
菜单支持层级结构,最大深度为三级,其中上级菜单占据一级,左侧菜单占据两级。
在创建和编辑菜单时,务必仔细遵循菜单节点命名的规范。例如,节点的命名应遵循如 admin/menu/index
的格式,并请注意节点路径中前后斜杠的使用,避免错误。
若在控制器方法的节点注释中标注了 menu true
,则该节点会自动出现在快捷提示列表中,方便用户直接从列表中选取,无需手动输入,提高了操作效率。
菜单管理截图
用户管理
在后台创建新的用户账号后,您需要为该账号分配已配置好的权限,这样用户登录后便能显示对应的菜单及访问权限。
请注意:系统默认提供的 admin
账号是超级用户,它拥有访问系统所有节点的权限。若您希望更改超级用户的账号名称,可以在 config/app.php
文件中进行相应配置。
用户管理截图