🔐 系统权限管理

ThinkAdmin v6 的权限管理基于简化的 RBAC 模型,并加入了注解权限配置。权限控制能够精确到按钮级别,为使用者提供了更大的灵活性。

🚀 权限管理特点

核心特性

  • 简化流程: 整合了功能节点、权限管理、菜单管理和用户管理
  • 自动维护: 功能节点由系统自动维护,根据控制器代码注释进行刷新
  • 注解配置: 只需添加标准的块注释即可加入权限控制
  • 精确控制: 权限控制精确到按钮级别

技术优势

  • 基于RBAC: 基于角色访问控制模型
  • 注解驱动: 通过注解自动生成权限节点
  • 细粒度控制: 支持到按钮级别的权限控制
  • 动态管理: 支持动态权限配置和管理

权限管理流程

  1. 功能节点: 系统根据控制器注释自动生成
  2. 权限配置: 在后台配置权限与功能节点的关联
  3. 用户授权: 为用户分配相应的权限
  4. 菜单管理: 根据权限控制菜单显示

注解规则

基础注解说明

注解规则案例如下,@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()
    {
        // 公开页面逻辑
    }
}

权限节点生成规则

系统会根据控制器和方法名自动生成权限节点:

  • 控制器: UserControlleruser
  • 方法: indexuser/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 文件中进行相应配置。

用户管理截图
最近更新:
Contributors: 邹景立