程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 若依框架
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 快速入门

  • 后端手册

  • 前端手册

    • 前端通用方法
    • 前端开发规范
    • 前端请求流程
    • 前端路由使用
    • Vue 组件使用
    • 前端动态菜单
    • 前端权限控制
      • 一、权限指令的使用
        • 1. 使用权限字符串 v-hasPermi
        • 2. 使用角色字符串 v-hasRole
      • 二、使用全局权限判断函数
        • 1. 使用权限判断函数 checkPermi
        • 2. 使用角色判断函数 checkRole
      • 三、前后端权限校验的重要性
    • 前台菜单管理
    • 多级目录与路由
    • 前端页签缓存
    • 使用 Svg Icon 图标
    • 使用字典功能
    • 动态系统参数
    • Axios 封装
    • 切换访问路径
    • 内容复制功能
  • 组件文档

  • 数据库分析

  • 若依框架
  • 前端手册
scholar
2024-08-31
目录

前端权限控制

# 权限控制使用指南

在实际开发中,权限控制是非常重要的一环。为了方便开发,我们通常会封装指令和函数来实现前端的权限判断。以下是对权限控制的详细总结,涵盖了指令、函数的使用及注意事项。

# 一、权限指令的使用

若依框架封装了一个 v-hasPermi 指令,用于在 Vue 模板中对元素进行权限控制。该指令可以根据用户是否拥有某个权限来决定是否渲染元素。

# 1. 使用权限字符串 v-hasPermi

  • 单个权限判断

    当用户拥有指定的权限时,按钮才会显示。

    <el-button v-hasPermi="['system:user:add']">存在权限字符串才能看到</el-button>
    
    1
  • 多个权限判断

    当用户同时拥有多个指定的权限时,按钮才会显示。

    <el-button v-hasPermi="['system:user:add', 'system:user:edit']">包含权限字符串才能看到</el-button>
    
    1

# 2. 使用角色字符串 v-hasRole

类似于 v-hasPermi,v-hasRole 指令用于判断用户是否拥有指定的角色。

  • 单个角色判断

    当用户拥有指定角色时,按钮才会显示。

    <el-button v-hasRole="['admin']">管理员才能看到</el-button>
    
    1
  • 多个角色判断

    当用户拥有多个角色中的任意一个时,按钮才会显示。

    <el-button v-hasRole="['role1', 'role2']">包含角色才能看到</el-button>
    
    1

# 二、使用全局权限判断函数

在某些情况下,可能不适合使用指令(例如在 el-tab-pane 这种元素标签中)。此时,可以通过全局的权限判断函数 checkPermi 和 checkRole 来手动控制元素的显示与隐藏。

# 1. 使用权限判断函数 checkPermi

该函数用于判断用户是否具有指定的权限,返回布尔值,决定元素是否渲染。

示例:

<template>
  <el-tabs>
    <!-- 判断用户是否具有 'system:user:add' 权限 -->
    <el-tab-pane v-if="checkPermi(['system:user:add'])" label="用户管理" name="user">用户管理</el-tab-pane>
    
    <!-- 判断用户是否同时具有 'system:user:add' 和 'system:user:edit' 权限 -->
    <el-tab-pane v-if="checkPermi(['system:user:add', 'system:user:edit'])" label="参数管理" name="menu">参数管理</el-tab-pane>
  </el-tabs>
</template>

<script>
import { checkPermi } from "@/utils/permission"; // 导入权限判断函数

export default {
  methods: {
    checkPermi // 将函数绑定到当前组件的 methods
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 2. 使用角色判断函数 checkRole

类似于 checkPermi,checkRole 用于判断用户是否拥有指定的角色。

示例:

<template>
  <el-tabs>
    <!-- 判断用户是否具有 'admin' 角色 -->
    <el-tab-pane v-if="checkRole(['admin'])" label="角色管理" name="role">角色管理</el-tab-pane>
    
    <!-- 判断用户是否同时具有 'admin' 或 'common' 角色 -->
    <el-tab-pane v-if="checkRole(['admin', 'common'])" label="定时任务" name="job">定时任务</el-tab-pane>
  </el-tabs>
</template>

<script>
import { checkRole } from "@/utils/permission"; // 导入角色判断函数

export default {
  methods: {
    checkRole // 将函数绑定到当前组件的 methods
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 三、前后端权限校验的重要性

虽然前端权限校验能提升用户体验,但它只是辅助功能。专业人员可以绕过前端限制直接请求后端接口,因此后端也必须进行严格的权限校验,确保系统安全。

总结

通过 v-hasPermi 和 v-hasRole 指令,结合全局的权限判断函数 checkPermi 和 checkRole,可以轻松实现 Vue.js 项目中的前端权限控制。尽管前端可以做权限校验,但后端的权限校验仍然是不可或缺的部分,它确保了系统的安全性和数据的完整性。

编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08
前端动态菜单
前台菜单管理

← 前端动态菜单 前台菜单管理→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式