Pure Admin 保姆级文档
  • 介绍
  • 快速开始
  • 目录结构
  • vscode文件夹详解
  • 平台配置
  • 布局
  • 路由和菜单
  • http请求
  • 打包和部署
  • 进阶

    • 图标
    • 主题和暗黑模式
    • 国际化
    • Tailwind CSS
    • RBAC权限
    • 类型声明
    • 单点登录
    • 自定义免登录
    • 打包优化
    • vite预构建
  • 生态

    • 对接平台的前后端项目
    • 函数工具库
    • 组件库
    • vite插件
  • 其他

    • 赞助
    • 常见问题
    • 非平台问题跟踪记录
    • git常用命令
    • 技术网站推荐
  • 赞助
    • 后端项目
    • 哔哩哔哩 (opens new window)
  • 日志

    • Github日志 (opens new window)
    • Gitee日志 (opens new window)
  • 预览

    • 完整版 (opens new window)
    • 精简版 (opens new window)
    • max版 (opens new window)
    • utils文档 (opens new window)
  • Github源码

    • 完整版 (opens new window)
    • 精简版 (opens new window)
    • Tauri版 (opens new window)
    • Electron版 (opens new window)
    • 配套后端 (opens new window)
    • 文档 (opens new window)
    • utils文档 (opens new window)
  • Gitee源码

    • 完整版 (opens new window)
    • 精简版 (opens new window)
    • Tauri版 (opens new window)
    • Electron版 (opens new window)
    • 配套后端 (opens new window)
    • 文档 (opens new window)
    • utils文档 (opens new window)
后端
高级服务
@pureadmin/utils文档 📕 平台快速开发教程 📺 平台页面、功能演示 📺 迁移JS版本教程 📺
  • 介绍
  • 快速开始
  • 目录结构
  • vscode文件夹详解
  • 平台配置
  • 布局
  • 路由和菜单
  • http请求
  • 打包和部署
  • 进阶

    • 图标
    • 主题和暗黑模式
    • 国际化
    • Tailwind CSS
    • RBAC权限
    • 类型声明
    • 单点登录
    • 自定义免登录
    • 打包优化
    • vite预构建
  • 生态

    • 对接平台的前后端项目
    • 函数工具库
    • 组件库
    • vite插件
  • 其他

    • 赞助
    • 常见问题
    • 非平台问题跟踪记录
    • git常用命令
    • 技术网站推荐
  • 赞助
    • 后端项目
    • 哔哩哔哩 (opens new window)
  • 日志

    • Github日志 (opens new window)
    • Gitee日志 (opens new window)
  • 预览

    • 完整版 (opens new window)
    • 精简版 (opens new window)
    • max版 (opens new window)
    • utils文档 (opens new window)
  • Github源码

    • 完整版 (opens new window)
    • 精简版 (opens new window)
    • Tauri版 (opens new window)
    • Electron版 (opens new window)
    • 配套后端 (opens new window)
    • 文档 (opens new window)
    • utils文档 (opens new window)
  • Gitee源码

    • 完整版 (opens new window)
    • 精简版 (opens new window)
    • Tauri版 (opens new window)
    • Electron版 (opens new window)
    • 配套后端 (opens new window)
    • 文档 (opens new window)
    • utils文档 (opens new window)
后端
高级服务
  • 指南

    • 介绍
    • 快速开始
    • 目录结构
    • .vscode文件夹详解
    • 平台配置
    • 布局
    • 路由和菜单
    • http请求
    • 打包和部署
  • 进阶

    • 图标(有新的更新)
    • 主题和暗黑模式
    • 国际化
    • Tailwind CSS(有新的更新)
    • RBAC权限
      • 用户
      • 角色
      • 权限
        • 粗粒度权限
        • 菜单权限
        • 实现原理、代码
        • 如何配置
        • url 链接权限
        • 实现原理、代码
        • 如何配置
        • 按钮、组件、类方法权限
        • 第一种模式,路由返回按钮级别权限
        • 组件方式判断权限
        • 函数方式判断权限
        • 指令方式判断权限
        • 第二种模式,登录接口返回按钮级别权限
        • 组件方式判断权限
        • 函数方式判断权限
        • 指令方式判断权限
        • 细粒度权限
        • 数据权限
    • 类型声明
    • 单点登录
    • 自定义免登录
    • 打包优化
    • vite预构建
  • 生态

    • 对接平台的前后端项目
    • 函数工具库
    • 组件库
    • vite插件
  • 其他

    • 赞助
    • 常见问题
    • 非平台问题跟踪记录
    • git常用命令
    • 技术网站推荐
Max-Js 版本 Max-Ts 版本
目录

RBAC权限

所谓 RBAC(Role Based Access Control)权限指的是基于角色的访问控制

img

# 用户

平台用 mock 模拟出两个账号,一个是 admin (opens new window),另一个是 common (opens new window),用户名字段为 username ,为字符串类型,当然平台将用户名在 pinia 的 state (opens new window) 里存了一份

# 角色

平台用 mock 模拟出两个角色,一个是 admin (opens new window),另一个是 common (opens new window),角色存放在 roles 字段中,为数组类型,可支持多个角色,当然平台将 当前登录用户的角色 在 pinia 的 state (opens new window) 里也存了一份

# 权限

整体分为 粗粒度权限 和 细粒度权限

# 粗粒度权限

# 菜单权限

# 实现原理、代码

页面整体的菜单存放在 wholeMenus (opens new window),所以我们只需要控制 wholeMenus 就能控制菜单的显示、隐藏。通过 filterNoPermissionTree (opens new window) 函数从菜单中过滤无权限的菜单

# 如何配置

只需要通过返回路由的 roles 配置项,赋予该菜单权限即可,如下图

img

实现细节

将菜单与路由解藕,这样可以更灵活的控制二者,不会造成一方改动必会影响另一方

# url 链接权限

# 实现原理、代码

平台在路由的 beforeEach (opens new window) 钩子函数中,通过对比当前用户的角色和当前路由中 roles 字段来判断是否有无权限,无权限跳转 403 (opens new window) 页面

# 如何配置

您不需要做任何配置,只需要像上图一样配置好权限就行,平台会根据有无权限自行判断,当有 admin 权限时可以看到系统管理目录以及里面的菜单页面并且可以通过 url 跳转,当然也可以在 菜单搜索 (opens new window) 中找到,当无 admin 权限时反之

# 按钮、组件、类方法权限

针对这三类权限,平台提供两种模式,它们都有组件方式判断权限、函数方式判断权限、指令方式判断权限 三种方法

# 第一种模式,路由返回按钮级别权限

通过路由的 auths 配置项,赋予对应页面按钮级别权限,如下图

img

提示

单个路由的 auths 字段中按钮级别权限标识必须保持唯一,而在不同路由的 auths 字段中可以重复使用相同的权限标识

# 组件方式判断权限

按钮、组件权限可用

  • 实现原理、代码

通过 hasAuth (opens new window) 函数,进行权限组件的封装,使用 Vue 提供的 Fragment (opens new window) 标签进行包裹,这样可让被包裹的组件无多余标签,减少渲染成本。查看具体代码 (opens new window)

  • 如何配置

具体参考 views/permission/button/index.vue (opens new window)

<Auth value="btn_add">
  <el-button type="success"> 拥有code:'btn_add' 权限可见 </el-button>
</Auth>
1
2
3

提示

平台已经全局注册 Auth (opens new window) 组件,无需重复注册

# 函数方式判断权限

按钮、组件、类方法权限都可用

  • 实现原理、代码

通过 hasAuth (opens new window) 函数判断某些按钮、组件、类方法是否有按钮级别的权限

  • 如何配置

具体参考 views/permission/button/index.vue (opens new window)

<el-button type="success" v-if="hasAuth('btn_add')">
  拥有code:'btn_add' 权限可见
</el-button>
1
2
3
hasAuth("btn_add") ? "显示" : "隐藏";
1
# 指令方式判断权限

按钮、组件权限可用。指令方式不能动态修改权限

  • 实现原理、代码

通过 hasAuth (opens new window) 函数,进行权限指令的封装。查看具体代码 (opens new window)

  • 如何配置

具体参考 views/permission/button/index.vue (opens new window)

<el-button type="success" v-auth="'btn_add'">
  拥有code:'btn_add' 权限可见
</el-button>
1
2
3
# 第二种模式,登录接口返回按钮级别权限

通过登录接口的permissions字段返回按钮级别权限,如下图

img

注意

permissions字段里的按钮级别权限标识需保持唯一

# 组件方式判断权限

按钮、组件权限可用

  • 实现原理、代码

通过 hasPerms (opens new window) 函数,进行权限组件的封装,使用 Vue 提供的 Fragment (opens new window) 标签进行包裹,这样可让被包裹的组件无多余标签,减少渲染成本。查看具体代码 (opens new window)

  • 如何配置

具体参考 views/permission/button/perms.vue (opens new window)

<Perms value="permission:btn:add">
  <el-button plain type="warning"> 拥有code:'permission:btn:add' 权限可见 </el-button>
</Perms>
1
2
3

提示

平台已经全局注册 Perms (opens new window) 组件,无需重复注册

# 函数方式判断权限

按钮、组件、类方法权限都可用

  • 实现原理、代码

通过 hasPerms (opens new window) 函数判断某些按钮、组件、类方法是否有按钮级别的权限

  • 如何配置

具体参考 views/permission/button/perms.vue (opens new window)

<el-button v-if="hasPerms('permission:btn:add')" plain type="warning">
  拥有code:'permission:btn:add' 权限可见
</el-button>
1
2
3
hasPerms("btn_add") ? "显示" : "隐藏";
1
# 指令方式判断权限

按钮、组件权限可用。指令方式不能动态修改权限

  • 实现原理、代码

通过 hasPerms (opens new window) 函数,进行权限指令的封装。查看具体代码 (opens new window)

  • 如何配置

具体参考 views/permission/button/perms.vue (opens new window)

<el-button v-perms="'permission:btn:add'" plain type="warning">
  拥有code:'permission:btn:add' 权限可见
</el-button>
1
2
3

# 细粒度权限

# 数据权限

数据权限对页面的要求就非常简单了,比如可以将数据权限的配置功能放在 角色管理 页面进行配置即可

上次更新: 2025/05/30, 06:18:16
Tailwind CSS(有新的更新)
类型声明

← Tailwind CSS(有新的更新) 类型声明→

最近更新
更多文章>
starsstars18.1k18.1k
forksforks3.4k3.4k
Theme by Vdoing | Copyright © 2020-2025 pure-admin | MIT License