后台系统权限流程

news2024/11/23 16:30:16

菜单管理

在这里插入图片描述

角色管理

在这里插入图片描述相关逻辑

<template>
  <div>
      <a-tree :checkable="true"
            @check="handlerChecked"
            @select="handlerSelectNode"
     />
  </div>
</template>

<script>
export default {
data(){
 return {
  // 选中节点的key[]
   checkedKeys:[],
   // 角色的权限数组
   permissions:[],
   // actionList的编辑弹窗的显隐
   visiable:false,
   // actionList编辑窗口添加的相关值
   pageAuth:{},
 }
},
methods:{
  handlerSelectNode(selectedKeys, {node}){
      // 这里不应该为叶子节点时弹出,应该为需要actionList的节点弹出,因为CURD页面也是叶子节点。上面图片描述有误,这里纠正
     // if(node.dataRef.isLeaf)  
      if(node.dataRef.needActions)
      {
        this.visiable=true  
      }
  },
  handlerChecked(checkedKeys, {halfCheckedKeys}){
    this.checkedKeys=[...checkedKeys,...halfCheckedKeys]
  },
  // 处理actionList的添加
  handlerAddActionList(pageKey,auth){
     this.pageAuth[pageKey]=auth
     /*
       auth数据格式
       actionList:['add','update','export'],
       ...
     */
  },
  addRole(){
     this.checkedKeys.forEach(v=>{
        this.permissions.push({
           ...this.pageAuth[v],
           permissionId:v,
        })
     })
     const role={
      name:'角色名称',
      permissions:this.permissions,
     }
     return role
  },
}
}
</script>

<style>

</style>

得到的角色数据像这样:

	const role= {
				id: 'admin',
				name: '管理员',
				status: 1,
				creatorId: 'system',
				createTime: 1497160610259,
				permissions: [
					{
						permissionId: 'page1',
						permissionName: '页面1',
						actionList: ['add', 'query', 'get', 'update', 'delete'],
					},
					{
						permissionId: 'page2',
						permissionName: '页面2',
						actionList: ['add', 'query', 'get', 'update', 'delete'],
					},
				],
			}

用户管理

在这里插入图片描述用户返回的数据格式

 const user={
      name:'hhh',
      token:'asfdsadsadfsad',
      roles:[
        {name:'admin1',permissions:[
          {actionList:['add','delete'],permissionId:'xxManage'},
        ]
        },
        {name:'admin2',permissions:[]},
      ],
   }

方案

  1. 后端可以返回路由表给前端,采用这种方案时,上面角色管理处的逻辑做稍许改动即可
  2. 后端返回前端permissions,前端这边根据permissions和完整的异步路由表得到当前登录用户的路由表,然后将这个路由表挂载到路由上
    tip:系统侧边菜单根据当前登录用户的路由表生成。

路由表的过滤

function hasPermission (permission, route) {
  if (route.meta && route.meta.permission) {
    return  permission.some(p => route.meta.permission.includes(p))
   
   // 含有操作权限值(actionList)时,使用下面这个,下面的两个hasPermission函数同理更改
    //  const item=permission.find(v=>route.meta.permission.includes(v.permissionId))
    //  if(item) return item.actionList
    //  else return false
  }
  return true              
}

function filterAsyncRouter (routerMap, user) {
  const accessedRouters = routerMap.filter(route => {
  // 取出该用户完整的permission。如果该有多个角色,需要合并得到完整的permmssion
    const  hasAuth=hasPermission(user.permissions, route)   
     if (hasAuth) {
      if(Array.isArray(hasAuth)) route.meta.actionList=hasAuth   // 把actionList添加到meta上
      if (route.children && route.children.length) {
        route.children = filterAsyncRouter(route.children, roles)
      }
      return true
    }
    return false
  })
  return accessedRouters
}

// asyncRoutes是完整的异步路由表
const routes=filterAsyncRouter(asyncRoutes,user)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宠物领养网站

成品详细信息 开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 基于java的宠物领养管理系统用户模块包括注册登录、个人信息管理、 可领养宠物信息查询、宠物助养信息查…

Java注册登录及邮箱发送账号激活(主要技术栈SpringBoot,MyBatis)

文章目录前言学习之前需要掌握的知识项目环境搭建数据库的搭建前端页面的搭建后端代码格式pojomapperControllerservice最后前言 项目流程图如下&#xff1a; 这里我们通过&#xff1a; 163邮箱来实现激活码发送qq邮箱来进行接收 学习之前需要掌握的知识 springboot的基本使…

解决tinypng 1.0.6 在线压缩C#接口报ssl错误的方法

因为作者的做法是使用了他们的证书, 但是如果是插件引用, 感觉是无法调用的. 所以我们直接下载code 修改这里即可 namespace TinifyAPI.Internal internal static class SSL public static bool ValidationCallback(HttpRequestMessage req, X509Certificate2 cert, X509Chain…

二十四节气-冬至,海报/文案分享,一口饺子,一口吉。

古说&#xff0c;冬至是阴极之至 阳气始生&#xff0c;有冬至大如年的说法 冬至到&#xff0c;家家户户吃水饺&#xff0c; “冬至不端饺子碗&#xff0c;冻掉耳朵没人管” “三九补一冬&#xff0c;来年无病痛” 可吃羊肉等温补…… 一组超级好的大牌文案 真心秀色可餐 下面是…

selenium自动化测试——unittest框架

文章目录unittestunittest 框架组成细节unittest测试示例用例的执行顺序忽略测试用例的执行unittest断言HTML报告生成生成HTML报告步骤异常捕捉与错误截图数据驱动unittest unittest 是python 的单元测试框架&#xff0c; 在python 的官方文档中&#xff0c;对unittest有详细的…

学会JVM,从这篇开始

目录 一、了解 JVM 二、JVM内存划分 三、类加载 1. 类加载是干啥的? 什么是类对象 ? 2. 类加载的大致过程 3. 什么是 双亲委派模型(重点) ? 四、GC 1. GC回收的是哪里的内存 2. 回收如何判断某个对象是否是垃圾? ① 引用计数(Python PHP采用) ② 可达性分析(JVM采用) 3. …

【计算机考研408】2023考研408大题预测总结

数据结构 链表相关算法题 反转链表1 题源1&#xff1a;反转链表1 比较简单&#xff0c;可以作为思想记忆&#xff0c;不太会这么直接考察 408可能考察链表的实现&#xff0c; ListNode* reverseList(ListNode* head) {if(head NULL) return NULL;//头插法ListNode * p …

计算机毕设Python+Vue学生健康管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jsp+ssm计算机毕业设计二手车交易系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

(八) mysql主从以及Redis集群

mysql主从以及Redis集群一、Mysq主从复制安装1、新建主服务器容器实例33072、进入/mydata/mysql-master/conf目录下新建my.cnf3、进入mysql-master容器4、master容器实例内创建数据同步用户5、新建从服务器容器实例33086、创建从机的配置文件7、在主数据库中查看主从同步状态8、…

Linux——shell及其基本命令

一、认识shell Shell是一个命令语言解释器。登陆Linux后&#xff0c;所有的命令都被shell解释&#xff0c;它支持函数、变量、数组、程序设计结构等。分为Bourne Shell和 C Shell&#xff0c;红帽默认Bash&#xff0c;是B Shell的扩展&#xff0c;完全兼容。 1&#xff0e;启…

python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题

在强化学习中&#xff0c;我们有兴趣确定一种最大化获取奖励的策略。最近我们被客户要求撰写关于MDP的研究报告&#xff0c;包括一些图形和统计输出。假设环境是马尔可夫决策过程 &#xff08;MDP&#xff09;的理想模型 &#xff0c;我们可以应用动态编程方法来解决强化学习…

【C++】STL——stack和queue的介绍与使用及模拟实现

stack和queue的介绍与使用及模拟实现 文章目录stack和queue的介绍与使用及模拟实现1.stack的介绍与使用1.1.stack的介绍1.2.stack的使用1.3.stack的模拟实现2.queue的介绍和使用2.1.queue的介绍2.2.queue的使用2.3.queue的模拟实现3. 容器适配器3.1.STL标准库中stack和queue的底…

分享15个全球顶尖的AIGC图片生成平台

人工智能正在改变许多行业的格局&#xff0c;而其中改变最直观和影响最大的就是AIGC领域的图像创作。 发展至今已经有很多AI图像生成平台&#xff0c;他们的共同特点就是使用人工智能将文本转换为图像&#xff0c;这是一次革命性的突破&#xff0c;也就是说通过这些AI工具可以…

springboot多数据源---3多数据源组件

一、dynamic-datasource多数源组件 两三个数据源、事务场景比较少 基于 SpringBoot 的多数据源组件&#xff0c;功能强悍&#xff0c;支持 Seata 分布式事务。 支持 数据源分组 &#xff0c;适用于多种场景 纯粹多库 读写分离 一主多从 混合模式。 支持数据库敏感配置信息 加密…

卡尔曼滤波

文章目录References卡尔曼滤波的作用世界中充满着不确定性在工程中整体感受状态空间方程结合例子理解公式公式6-1说明公式6-2说明参数H的意义总结怎么融合&#xff1f;从简单的例子入手-测量一枚硬币的直径融合实例卡尔曼公式详细推导协方差矩阵卡尔曼增益的推导详细推导误差协…

基于规则的分类(顺序覆盖算法)及最近邻分类器(KNN算法)

顺序覆盖算法的步骤 顺序覆盖算法的目标是提取一个分类规则&#xff0c;该规则覆盖训练集中大量正例&#xff0c;没有或仅覆盖少量反例。 整个过程包含以下四个步骤&#xff1a; 规则增长规则评估停止准则规则剪枝 顺序覆盖算法的第一步——规则增长 一般到特殊&#xff08…

高压功率放大器基于液晶生物光电传感器中的应用

实验名称&#xff1a;基于液晶的高通量蛋白质光电生物传感器 研究方向&#xff1a;生物识别与检测 测试目的&#xff1a; 蛋白质分析是疾病诊断和医学研究中一类重要的方法。本文提出了一种单基底的液晶生物光电传感器&#xff0c;可用于快速检测蛋白质的浓度。实验发现单基底液…

ZigBee案例笔记 -- LED控制与按键检测(输入/输出)

文章目录1.相关寄存器2.按键检测&#xff08;引脚输入配置&#xff09;3.LED控制&#xff08;引脚输出配置&#xff09;1.相关寄存器 CC2530&#xff08;ZigBee&#xff09;的开发也是类似51单片机一样针对寄存器进行配置&#xff0c;因为其内核实质上也是51内核&#xff0c;对…

Sulfo CY5-MAL|磺基-CY5 马来酰亚胺

Sulfo CY5-MAL|磺基-CY5 马来酰亚胺 英文名称&#xff1a;Cyanine5 maleimide Cyanine5 MAL Cy5 maleimide Cy5 MAL CAS&#xff1a;1437872-46-2 外观&#xff1a;深蓝色粉末 分子量&#xff1a;641.24 分子式&#xff1a;C38H45ClN4O3 花菁染料&#xff0c;一种发…