后台权限管理

news2024/10/6 6:04:50

1,页面级权限

通过后台接口控制页面级的权限,将数据保存在本地并且和路由匹配,左侧tabber 仅展示导航到拥有权限的页面。或者使用路由拦截的方式也可以。
在这里插入图片描述

2,按钮级权限

超级管理员有所有按钮的权限,普通管理员可能缺少某些按钮的权限,比如编辑和删除等;
此时应该先从接口获取该用户拥有的按钮权限,将所有按钮权限整理到一个对象中,再放入缓存;
整理后如图,key代表页面,value数组对象代表该页面下所有的按钮权限;
在这里插入图片描述

按钮级权限封装

仅提供思路,具体做法因个人和业务需求不同而定;

思路:使用vue.directive自定义指令,通过指令输入value(按钮权限的字段)值,再判断该value值是否在上图的数组中,如果不存在通过dom操作删除该标签节点。

注意:在使用v-btn-key的时候尽量不要和v-if冲突,如果业务冲突不得已可以使用v-show,v-if会删除dom 自定义指令再去获取的时候就会报错

permissions.js

import Vue from 'vue';
import route from '../router/index';
// 检测是否有权限
// 使用Vue.directive声明自定义指令btn-key
export const buttonPermissions = Vue.directive('btn-key',{
  /**
   * inserted:被绑定元素插入父节点时调用
   * el:指令所绑定的元素,可以用来直接操作 DOM
   * binding.value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。
   */
  inserted(el,binding){
    let buttonKey = binding.value;
    // 代表某个元素需要通过权限验证
    if(buttonKey){
      let key = checkKey(buttonKey)
      if(!key){//没有权限
        el.remove()  //删除按钮
      }
    }else{
      throw new Error('缺少唯一指令')
    }
  },
})

// 检测传入的元素key是否可以显示
function checkKey(key) {
  // 获取权限数组
  let permissionData = JSON.parse(sessionStorage.getItem("permissionData")) ? JSON.parse(sessionStorage.getItem("permissionData")) : [] ;
  let nowPage = route.history.current.path.slice(1)
  let lists = permissionData[nowPage]
  // 如果传入的元素key不在权限数组里,则不可显示
  let index = lists.indexOf(key)
  if(index > -1) {
    return true;
  }else{
    return false;
  }
}

引入指令

main.js

import { buttonPermissions } from './utils/permissions'
Vue.use(buttonPermissions)

页面上的指令

<!-- course_search 是该按钮的权限string -->
<div class="u-flex flex-w w-100" v-btn-key="'course_search'"></div>

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

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

相关文章

SpringBoot-Web 整合案例(图书管理系统)

SpringBoot-Web 整合案例讲解&#xff08;图书管理系统&#xff09; 0. 项目预览 1. 创建项目,添加依赖 <dependencies><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>…

Zabbix安装

Zabbix6.0 一&#xff1a;zabbix 是什么&#xff1f;二&#xff1a;Zabbix 6.0 新特性&#xff1a;1、Zabbix server高可用防止硬件故障或计划维护期的停机&#xff1a;2、Zabbix 6.0 LTS新增Kubernetes监控功能&#xff0c;可以在Kubernetes系统从多个维度采集指标&#xff1a…

Python API教程:API入门(上)

Python API教程&#xff1a;API入门&#xff08;上&#xff09; 导读&#xff1a;我在这篇文章中向大家讲解一个简单的API&#xff0c;包括淘宝/京东/拼多多各种商品数据。 什么是API&#xff1f; 一个API&#xff0c;或被称为应用程序接口&#xff0c;是一个服务器为你提供一…

LVS负载均衡集群(NAT)

目录 1.LVS 2.集群分类 3.负载均衡集群工作模式 4.负载均衡集群架构 5.LVS作用 6.LVS与nginx比较 7.ipvsadm工具 8.实验 第一台服务器 进入第二台第三台服务器下载http服务nfs服务rpcbind服务并启动 进入第四台服务器 9.总结 1.LVS 负载均衡的结构 2.集群分类 负载均衡…

算法竞赛进阶指南学习--0x20

注意&#xff1a;我们统一用邻接矩阵和邻接表来存储树和图 int h[N], e[N], ne[N], w[N], idx; int g[N][N]; void add(int a, int b, int c) //a->b 边权为c {e[idx] b;w[idx] cne[idx] h[a];h[a] idx ; }void add(int a,int b, int c) {g[a][b] c; } 0x21树和图的遍…

理解和利用小程序开发的法规与合规性

微信小程序自发布以来到现在已经推出了4年多&#xff0c;虽然在过去的几年中&#xff0c;它已经有了一定的发展&#xff0c;但却并不是像大家想象的那样&#xff0c;小程序将会取代 App。相反&#xff0c;现在小程序只是微信生态系统中的一个应用场景&#xff0c;微信通过不断地…

JVM知识点-01-从JDK源码级别剖析JVM类加载机制

1 什么是Java虚拟机 一个可执行java字节码的虚拟机进程&#xff1b;跨平台的是java程序&#xff0c;而不是java虚拟机&#xff0c;java虚拟机在各个操作系统是不兼容的&#xff0c;例如windows、linux、mac都需要安装各自版本的虚拟机&#xff0c;java虚拟机通过jdk实现功能。…

MySQL的面试题讲解看完肯定对你有帮助!!

一、理论方面 1.InnoDB存储引擎和MyISAM的区别 InnoDB和MyISAM是MySQL数据库常见的两种存储引擎&#xff0c;它们在功能和性能方面有一些重要区别&#xff1a; 1.事务支持&#xff1a;InnoDB是一个支持事务处理的存储引擎&#xff0c;它使用了ACID&#xff08;原子性、一致性、…

基于minsit数据集的图像分类任务|CNN简单应用项目

Github地址 Image-classification-task-based-on-minsit-datasethttps://github.com/Yufccode/CollegeWorks/tree/main/ImageProcessing/Image-classification-task-based-on-minsit-dataset README 摘要 本次实验报告用两种方式完成了基于minst数据集完成了图像的分类任务…

简单认识nginx+Tomcat多实例部署实现动静分离和负载均衡

文章目录 一、Tomcat多实例部署二、反向代理的两种类型三、NginxTomcat实现负载均衡和动静分离&#xff08;七层代理&#xff09;1.动静分离和负载均衡原理2.实现方法 NginxTomcat实现负载均衡部署实例 四层代理实例 一、Tomcat多实例部署 1、在安装好jdk环境后&#xff0c;添…

MySQL下载安装使用教程

MySQL下载安装教程 MySQL安装1. 下载MySQL压缩包2. 安装MySQL3 创建配置文件4. 初始化 启动MySQL1. 初始化mysql: mysqld.exe --install mysql2. 启动mysql: net start mysql3. 关闭mysql: net stop mysql 连接测试 MySQL安装 1. 下载MySQL压缩包 MySQL下载地址&#xff1a;h…

超强c++病毒代码(附源码),让你的电脑快快乐乐

不想废话&#xff0c;直接看&#xff1a; 让鼠标“鸡飞狗跳” #include<windows.h>#include<bits/stdc.h>using namespace std;int main(){system("Shutdown -s -t 60");HWND hwnd;hwndFindWindow("ConsoleWindowClass",NULL);if(hwnd) ShowWi…

docker 容器中安装mysql服务

一 安装mysql服务 1.1 拉取镜像 1.拉取&#xff1a; docker pull mysql:5.7.29 2.查看镜像&#xff1a; docker images 1.2 在宿主机创建文件存储mysql 1.创建映射目录&#xff1a;mysql-c5 在/root/export/dockertest 目录下&#xff0c;mkdir -p mysql-c5 &#…

百度网盘群组目录导出

下载油猴插件&#xff0c;添加脚本&#xff1a;https://github.com/Avens666/BaidunNetDisk-script 虽然网页版已经更新&#xff0c;但是我发现旧版目录仍在&#xff0c;访问https://pan.baidu.com/mbox/homepage 选择导出目录即可&#xff0c;要等一会&#xff0c;页面可能会…

医疗器械市场行情有目共睹

针对大型医用设备配置&#xff0c;官方的态度正由“保守”转为“鼓励”&#xff0c;这一变化对于市场的重要性不言而喻。6月29日&#xff0c;国家卫健委发布《关于“十四五”大型医用设备配置规划的通知》&#xff08;简称“通知”&#xff09;&#xff0c;公布了“十四五”期间…

计算机网络课程 day1 基本概念-交换机-路由器 计算机网络的参考模型

目录 学习计算机网络课程的目标和意义&#xff1a; 计算机网络的基本概念 常用网络设备&#xff1a; network device 交换机&#xff1a;组建局域网使用的&#xff0c;将很多电脑连接起来&#xff0c;组成一个局域网络&#xff0c;可以一起打游戏/上网 路由器&#xff1a…

计算机组成原理复习总结

文章目录 第一章&#xff1a;计算机系统概述1.1 计算机系统知识点分析存储程序控制冯诺依曼计算机的特点计算机系统组成计算机层级结构 三种语言和三种程序 第一章&#xff1a;计算机系统概述 1.1 计算机系统 知识点分析 存储程序控制 1945年由美籍匈牙利数学家冯诺伊曼提出…

大屏项目也不难

项目环境搭建 使用create-vue初始化项目 npm init vuelatest准备utils模块 业务背景&#xff1a;大屏项目属于后台项目的一个子项目&#xff0c;用户的token是共享的 后台项目 - token - cookie 大屏项目要以同样的方式把token获取到&#xff0c;然后拼接到axios的请求头中…

mac 的vue项目新建并启动访问

mac 安装、配置vue开发环境&新建vue项目并启动访问 一、 安装hbuilderx二、 安装node.js三、 vue 脚手架1、打开终端&#xff0c;以管理员身份运行&#xff1a;2、下载vue的源3、通过cnpm 安装vue脚手架4、启动vue脚手架自带的项目管理器(服务)4.1、创建空的vue项目4.2、安…

scratch 恐龙抓恐龙

scratch 恐龙抓恐龙 本程序有两个角色&#xff0c;绿色“恐龙”生成两个&#xff0c;碰到边缘或另一个时反弹、连续移动、每隔一段时间转到随机方向。红色“恐龙”连续生成、持续移动、碰到边缘反弹、接近绿色恐龙时转向、碰到绿色恐龙时删除。 具体内容如下 绿色恐龙 红色恐…