JeeSite Vue3:前端如何实现权限管理

随着技术的飞速发展,前端开发技术日新月异。在这个背景下,JeeSite Vue3 作为一个基于 Vue3、Vite、Ant-Design-Vue、TypeScript 和 Vue Vben Admin 的前端框架,引起了广泛关注。它凭借其先进的技术栈和丰富的功能模块,为初学者和团队开发者提供了一个快速、高效且强大的开发平台。

JeeSite Vue3框架截图

图片

 

图片

   

图片

 

图片

 

JeeSite Vue3 的技术栈

JeeSite Vue3 的技术栈包括 Vue3、Vite、Ant-Design-Vue、TypeScript 和 Vue Vben Admin。这些技术都是目前前端开发领域的领军者,它们结合在一起,为开发者提供了一个强大且现代化的开发环境。

Vue3 作为一款流行的前端框架,凭借其组件化的开发方式和简洁的 API,大大提高了开发效率。Vite 则是一个现代化的前端构建工具,提供了快速的冷启动和即时热更新,使得开发过程更加流畅。Ant-Design-Vue 是 Ant Design 的 Vue 实现,提供了一套高质量的 UI 组件,使界面设计更加美观和易用。TypeScript 是 JavaScript 的超集,通过静态类型检查和丰富的类型系统,提高了代码质量。最后,Vue Vben Admin 是一个高质量的后台管理系统模板,为中大型项目的开发提供了现成的解决方案。

在 Vben Admin 基础上做的改进:

  • 更精致的界面细节优化改进,非常适合信息化管理后台

  • 主题风格改进,不同的布局风格,菜单及权限体验优化

  • 顶部菜单、分隔菜单、混合菜单的活动状态激活和加载优化改进

  • 树表支持异步的封装,提升展开折叠性能,支持按层次展开折叠树表

  • 树结构新增快捷刷新、动态生成树、层次独立和不独立的数据返回兼容

  • 增加左树右表功能展示,可折叠左树,树组件增加默认图标

  • 表单组件适应各种数据格式来源,特别是多选字符串到数组的互转兼容

  • 表单新增各种便捷属性和表单组件,下拉框和树选择支持标签名回显

  • 表单组件,改进折叠表单 Action 的算法,智能化布局

  • 表格组件,Action 更多,支持横向显示操作,更方便

  • 表格组件,子表编辑改进,表格列排序和重置改进优化

  • 新增字典组件,支持展示到表格列、表单组件下拉框单选框等

  • 字典标签支持 Tag、Badge、自定义 class、style 等,显示风格

  • 更方便的支持 Tab 页面的缓存,切换页签的时候不重载页面内容

  • Tab 页签界面美化、图标显示、任何标签上右键,可快速刷新等等

  • 全局 Axios 改进,兼容各种数据格式,超时消息提醒改进

  • 功能权限鉴权改进,并兼容本地路由和后台路由同时使用

  • 等等各种细节改进,体验优化,黑暗布局细节优化

  • Vue端完全开源,用上你就会爱上,实在太方便了

设计特点

定义众多组件,非常贴心的组件属性及小功能,符合 JeeSite 以往的设计思想,列表和表单以数据驱动视图,极大简化了业务功能开发,注释分解详见本页最下【源码解析】

为什么做数据驱动视图?前端向下兼容一直是最大的问题,有了一套相应的标准,会对框架升级帮助很大。比如你可以非常小的成本,业务代码改动非常小的情况下,去升级前端;数据驱动视图可以为未来自定义拖拽表单做更好的铺垫,数据存储结构更清晰化,更利于维护。

提示:请仔细阅读源码解析,表单视图和列表视图上的注释哦,复杂表单可以多表单联合使用。

学习准备

  • VSCode - 推荐 IDE 集成开发工具

  • Node.js 16 和 git - 开发环境

  • Vite - 熟悉 Vite 特性

  • Vue-v3 - 熟悉 Vue 基础语法

  • TypeScript - 熟悉 TS 基本语法

  • ES6+ - 熟悉 ES6 基本语法

  • Vue-Router-v4 - 熟悉 vue-router 基本使用

  • Vue-Vben-Admin - 熟悉 UI 及表单列表及常用组件使用

  • Ant-Design-Vue - 熟悉 UI 基本使用

安装使用

  • 如果没有安装 Node.js 16,下载地址:https://nodejs.org

# 验证
node -v
  • 如果没有安装 Yarn 执行安装(要求 Yarn v1.x)

npm i -g yarn
# 验证
yarn -v
  • 获取代码

git clone https://gitee.com/thinkgem/jeesite-vue.git
cd jeesite-vue

注意:不要放到中文或带空格的目录下。

  • 安装依赖

yarn config set registry https://registry.npm.taobao.org
yarn install
  • 开发环境运行访问(方式一)

yarn serve

开发环境会加载文件较多,便于调试,请耐心等待。

  • 编译打包后运行访问(方式二)

yarn preview

编译打包后,会整合这些文件,所以访问性能会大大提高,生产环境可以开启 gzip

  • 打包发布程序

yarn build

打包完成后,会在根目录生成 dist 文件夹,发布 nginx。

详见文档:https://jeesite.com/docs/vue-install-deploy/#部署到正式服务器

后端服务

  • 安装后台服务 JeeSite v5.x

    后台服务端下载地址: https://gitee.com/thinkgem/jeesite4/tree/v5.5/

  • 本地运行

  • 环境准备:JDK 1.8 or 11、17Maven 3.6+、使用 MySQL 5.7 or 8.0 数据库、其它数据库

  • 下载源码:https://gitee.com/thinkgem/jeesite4/repository/archive/v5.3.zip 并解压

  • 打开文件:/web/src/main/resources/config/application.yml 配置JDBC连接

  • 执行脚本:/web/bin/init-data.bat 初始化数据库

  • 执行脚本:/web/bin/run-tomcat.bat 启动服务即可

  • 浏览器访问:http://127.0.0.1:8980/js/ 账号 system 密码 admin

  • 部署常见问题:https://jeesite.com/docs/faq/

  • 分离端安装:https://jeesite.com/docs/vue-install-deploy/

  • 快速运行

  • 环境准备:JDK 1.8 or 11、17Maven 3.6+、无需准备数据库(使用内嵌 H2 DB)

  • 下载源码:https://gitee.com/thinkgem/jeesite4/repository/archive/v5.3.zip 并解压

  • 执行脚本:/web-fast/bin/run-tomcat.bat 启动服务即可(自动初始化库)

  • 浏览器访问:http://127.0.0.1:8980/js/ 账号 system 密码 admin

  • 部署常见问题:https://jeesite.com/docs/faq/

  • 分离端安装:https://jeesite.com/docs/vue-install-deploy/

  • 打开 .env.development 文件,修改后台接口:

# 代理设置,可配置多个,不能换行,格式:[访问接口的根路径, 代理地址, 是否保持Host头]
# VITE_PROXY = [["/js","https://vue.jeesite.com/js",true]]
VITE_PROXY = [["/js","http://127.0.0.1:8980/js",false]]

# 访问接口的根路径
VITE_GLOB_API_URL = 

# 访问接口的前缀,在根路径之后
VITE_GLOB_API_URL_PREFIX = /js

演示地址

  1. 地址:http://vue.jeesite.com/

权限管理实现

图片

如上图所示:在Jeesite后台管理系统中,通过设置不同的角色从而有了不同的权限标识,例如系统管理员对应的权限标识是corpAdmin。

在Jeesite后台管理系统开发中可以使用usePermission函数来管理权限,用户登录后台管理系统后,可以通过usePermission函数来获取当前登录用户权限标识,函数方式是实现权限管理最直接明了的一种方式,且更加灵活,推荐使用哦!

函数方式

usePermission提供了按钮级别的权限控制(即可控制该按钮是否显示)。下面代码实现的是当拥有 [sys:user:view, sys:empUser:view]权限显示该按钮

<template>  <a-button v-if="hasPermission(['sys:user:view', 'sys:empUser:view'])" color="error" class="mx-4">    拥有 [sys:user:view, sys:empUser:view] 权限字符串可见  </a-button></template><script lang="ts">  import { usePermission } from '/@/hooks/web/usePermission';  import { RoleEnum } from '/@/enums/roleEnum';  export default defineComponent({    setup() {      const { hasPermission } = usePermission();      return { hasPermission };    },  });</script>

我们还可以通过usePermission实现对树形组件展示不同的数据,从而实现不同权限展示不同菜单功能,下面代码实现的是当拥有sys:user:view', 'sys:empUser:view权限展示数据gData,其他类型权限展示数据gDataTwo,通过这个示例,我们可以知道使用函数方式是非常方便的,且非常灵活!

<template><a-tree    class="draggable-tree"    v-model:expandedKeys="expandedKeys"    draggable    :tree-data="hasPermission(['sys:user:view', 'sys:empUser:view'])?gData:gDadaTwo"    @dragenter="onDragEnter"    @drop="onDrop"  />  </template>  <script lang="ts">  import { usePermission } from '/@/hooks/web/usePermission';  import { RoleEnum } from '/@/enums/roleEnum';  export default defineComponent({    setup() {      const { hasPermission } = usePermission();      return { hasPermission };    },  });</script>

组件方式

用于项目权限的组件,一般用于按钮级等细粒度权限管理

<template>
  <div>
    <Authority :value="'sys:user:view'">
      <a-button type="primary" block> 只有 sys:user:view 权限字符串的可见 </a-button>
    </Authority>
  </div>
</template>
<script>
  import Authority from '/@/components/Authority';
  import { defineComponent } from 'vue';
  export default defineComponent({
    components: { Authority },
  });
</script>

指令方式

指令方式不能动态更改权限(但使用方法最简单)

<a-button v-auth="'sys:user:view'" type="primary" class="mx-4">  拥有 sys:user:view 权限字符串的可见</a-button>

表格列权限

const columns: BasicColumn[] = [  {    title: '列名1',    dataIndex: 'field1',    width: 160,    // 表格列权限控制,指定权限字符串    auth: 'test:testData:edit',    // 这里还可以使用 usePermission 函数方式进行动态判断权限    ifShow: () => hasPermission('sys:test:view'),    // 根据字段数值判断表格列是否显示    ifShow: () => record.status === '0',  },]
 

表格操作列权限​​​​​​​

const actionColumn: BasicColumn = {  actions: (record: Recordable) => [    {      // 按钮权限控制,指定权限字符串      auth: 'test:testData:edit',      // 这里还可以使用 usePermission 函数方式进行动态判断权限      ifShow: () => hasPermission('sys:test:view'),      // 根据字段数值判断按钮是否显示      ifShow: () => record.status === '0',    },  ],};
 

表单字段权限​​​​​​​

const inputFormSchemas: FormSchema[] = [  {    label: t('是否显示该表单字段'),    field: 'field1',    component: 'Input',    componentProps: {      maxlength: 500,    },    // 根据数据值判断表单控件是否显示(正常渲染控件,只是控制显示隐藏)    show: ({ values }) => record.status === '0',    // 根据数据值判断表单控件是否显示(为 false 时不渲染控件)    ifShow: ({ values }) => record.status === '0',    // 如果有 sys:test:view 查看权限,则显示控件    ifShow: ({ values }) => hasPermission('sys:test:view'),  },
 

弹窗按钮权限

提交按钮权限,控制按钮是否显示,举例如下:

<BasicDrawer :okAuth="'test:testData:edit'" />
 

结语

JeeSite Vue3 作为一款引领未来的前端框架,凭借其先进的技术栈和丰富的功能模块,为前端开发者提供了一个全新的开发体验。它让初学者能够快速入门,同时也为团队开发者提供了强大的支持。无论是微小项目还是中大型项目,JeeSite Vue3 都能够提供现成的解决方案和丰富的示例,使开发过程变得更加高效。

附jeesite-vue框架下载地址

  • 码云Gitee:https://gitee.com/thinkgem/jeesite-vue

附框架服务端下载地址

  • 码云Gitee:https://gitee.com/thinkgem/jeesite4/tree/v5.5/

欢迎关注我的微信技术公众号: 前端组件开发

d848d5658a07453c843277846948c608.png

欢迎加入“前端组件开发学习”交流群,一起学习成长!可关注  “前端组件开发” 公众号后,私信后申请入群。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对象数组的添加,删除和遍历.Java

创建一个Student的类&#xff0c;属性包含学号&#xff0c;姓名&#xff0c;年龄 &#xff0c;在此基础上进行对象的添加&#xff0c;删除&#xff0c;遍历 null调用方法必定报错&#xff0c;所以要判断数组里的元素&#xff08;本题数组里的每个元素都是一个对象&#xff09;…

P2802 回家

P2802 回家 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 虽然是普及-难度的题&#xff0c;但是感觉细节有很多。 细节&#xff1a; bfs第一次到 ( i , j ) (i, j) (i,j)&#xff0c;但是距离不一定是最小的 鼠标是一次性物品 血量到达 ( x x , y y ) (xx, yy) (xx,yy)为…

罗永浩和阿里云服务器ECS经济型e实例性能如何?

罗永浩直播卖阿里云&#xff0c;带货爆款云服务器ECS经济型e实例是什么&#xff1f;阿里云服务器ECS经济型e实例的使命是什么&#xff1f;一般来讲&#xff0c;学生、开发者和小微企业主要使用云服务器主要开展网站建设、开发测试和业务灾备、搭建小程序后端服务、Web应用、云上…

Vite为什么比Webpack快得多?

Vite为什么比Webpack快得多&#xff1f; 在前端开发中&#xff0c;构建工具扮演着至关重要的角色&#xff0c;而Vite和Webpack无疑是两个备受关注的工具。然而&#xff0c;众多开发者纷纷赞誉Vite的速度之快&#xff0c;本文将深入探讨Vite相较于Webpack为何更快的原因&#xf…

六大排序总结

前面分别分享了六大排序的详细内容&#xff0c;本博客是数据结构中六大排序的总结&#xff0c;下期分享C的学习干货&#xff0c;我们一起进步。 排序算法复杂度及稳定性分析 稳定性&#xff1a; 这个博客如果对你有帮助&#xff0c;给博主一个免费的点赞就是最大的帮助❤ 欢迎…

【QT+QGIS跨平台编译】045:【netcdf4+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、NetCDF4介绍二、文件下载三、文件分析四、pro文件五、编译实践一、NetCDF4介绍 NetCDF4 是 NetCDF(Network Common Data Form)的更新版本,相比于 NetCDF3,NetCDF4 提供了更多的高级功能和性能优化。以下是 NetCDF4 的一些特点和介绍: HDF5 …

阿里云服务器4核8G配置最新活动价格

阿里云服务器4核8g配置云服务器u1价格是955.58元一年&#xff0c;4核8G配置还可以选择ECS计算型c7实例、计算型c8i实例、计算平衡增强型c6e、ECS经济型e实例、AMD计算型c8a等机型等ECS实例规格&#xff0c;规格不同性能不同&#xff0c;价格也不同&#xff0c;阿里云服务器网al…

第3章.引导ChatGPT精准角色扮演:高效输出专业内容

角色提示技术 角色提示技术&#xff08;role prompting technique&#xff09;&#xff0c;是通过模型扮演特定角色来产出文本的一种方法。用户为模型设定一个明确的角色&#xff0c;它就能更精准地生成符合特定上下文或听众需求的内容。 比如&#xff0c;想生成客户服务的回复…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《强沙尘暴下新能源基地的弹性评估及其提升方法 》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Qt for WebAssembly 环境搭建 - Windows新手入门

Qt for WebAssembly 环境搭建 - Windows新手入门 一、所需工具软件1、安装Python2、安装Git2.1 注册Github账号2.2 下载安装Git2.2.1配置Git&#xff1a;2.2.2 配置Git环境2.2.3解决gitgithub.com: Permission denied (publickey) 3 安装em编译器 二、Qt配置编译器三、参考链接…

跨越时空,启迪智慧:奇趣相机重塑儿童摄影与教育体验

【科技观察】近期&#xff0c;奇趣未来公司以其创新之作——“奇趣相机”微信小程序&#xff0c;强势进军儿童AI摄影市场。这款专为亚洲儿童量身定制的应用&#xff0c;凭借精准贴合亚洲儿童面部特征的AIGC大模型&#xff0c;以及丰富的摄影模板与场景设定&#xff0c;正在重新…

实时数仓建设实践——滴滴实时数据链路组件的选型

目录 前言 一、实时数据开发在公司内的主要业务场景 二、实时数据开发在公司内的通用方案 三、特定场景下的实时数据开发组件选型 3.1 实时指标监控场景 3.2 实时BI分析场景 3.3 实时数据在线服务场景 3.4 实时特征和标签系统 四、各组件资源使用原则 五、总结和展望…

机器学习——降维算法-奇异值分解(SVD)

机器学习——降维算法-奇异值分解&#xff08;SVD&#xff09; 在机器学习中&#xff0c;降维是一种常见的数据预处理技术&#xff0c;用于减少数据集中特征的数量&#xff0c;同时保留数据集的主要信息。奇异值分解&#xff08;Singular Value Decomposition&#xff0c;简称…

240330-大模型资源-使用教程-部署方式-部分笔记

A. 大模型资源 Models - Hugging FaceHF-Mirror - Huggingface 镜像站模型库首页 魔搭社区 B. 使用教程 HuggingFace HuggingFace 10分钟快速入门&#xff08;一&#xff09;&#xff0c;利用Transformers&#xff0c;Pipeline探索AI。_哔哩哔哩_bilibiliHuggingFace快速入…

代码学习第32天---动态规划

随想录日记part32 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.30 主要内容&#xff1a;今天开始要学习动态规划的相关知识了&#xff0c;今天的内容主要涉及两个方面&#xff1a; 不同路径 &#xff1b; 不同路径 II。 62.不同路径 63. 不同路径 II 动态…

Linux内核之Binder驱动container_of进阶用法(三十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

LeetCode 双指针专题

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不…

java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 广度优先双分裂蛇 广度优先双分裂蛇 双分裂蛇&#xff1a;是求二…

HCIA-Datacom实验_04_实验二:IPv4编址及IPv4路由基础实验

一、拓扑 二、改名 R1 R2 R3 三、配置接口IP R1 R2 R3 四、查看路由表 此时每台设备上会有两条直连路由 R1 R2 R3 五、ping测试 R1pingR2接口 R1pingR3接口 R2pingR1接口 R2pingR3接口 R3pingR1接口 R3pingR2接口 六、配置LoopBack地址 R1 R2 R3 七、写路由 R1到R2的Loo…

吴恩达2022机器学习专项课程(一) 4.1 梯度下降

问题预览 梯度下降算法的作用是&#xff1f;梯度下降的过程&#xff1f;梯度下降和最小化成本函数的联系&#xff1f;所有的成本函数都是一个形状吗&#xff1f;在非凸形状中&#xff0c;梯度下降的更新过程是&#xff1f;在非凸形状中&#xff0c;不同的初值对最小化成本函数…