后台管理系统: 权限管理

权限管理

角色:一家企业而言:BOSS、运维、销售、程序员

权限:超级管理员(BOSS),是有权利操作整个项目的所有的模块
     test(新媒体),只能首页、商品管理者一部分菜单数据
admin:超级管理员-----boss

权限管理:用户管理、角色管理、菜单管理
由于用户管理、角色管理、菜单管理:对于获取数据、展示数据、收集数据

首先搭建权限管理的静态界面

然后去路由当中去配置权限

export const asyncRoutes = [
  {
  name: 'Acl',
  path: '/acl',
  component: Layout,
  redirect: '/acl/user/list',
  meta: {
    title: '权限管理',
    icon: 'el-icon-lock'
  },
  children: [
    {
      name: 'User',
      path: 'user/list',
      component: () => import('@/views/acl/user/list'),
      meta: {
        title: '用户管理',
      },
    },
    {
      name: 'Role',
      path: 'role/list',
      component: () => import('@/views/acl/role/list'),
      meta: {
        title: '角色管理',
      },
    },
    {
      name: 'RoleAuth',
      path: 'role/auth/:id',
      component: () => import('@/views/acl/role/roleAuth'),
      meta: {
        activeMenu: '/acl/role/list',
        title: '角色授权',
      },
      hidden: true,
    },
    {
      name: 'Permission',
      path: 'permission/list',
      component: () => import('@/views/acl/permission/list'),
      meta: {
        title: '菜单管理',
      },
    },
  ]
},
{
  path: '/product',
  component: Layout,
  name: 'Product',
  meta: { title: '商品管理', icon: 'el-icon-goods' },
  children: [
    {
      path: 'trademark',
      name: 'TradeMark',
      component: () => import('@/views/product/tradeMark'),
      meta: { title: '品牌管理' }
    },
    {
      path: 'attr',
      name: 'Attr',
      component: () => import('@/views/product/Attr'),
      meta: { title: '平台属性管理' }
    },
    {
      path: 'spu',
      name: 'Spu',
      component: () => import('@/views/product/Spu'),
      meta: { title: 'Spu管理' }
    },
    {
      path: 'sku',
      name: 'Sku',
      component: () => import('@/views/product/Sku'),
      meta: { title: 'Sku管理' }
    },
  ]
},
{
  path: '/test',
  component: Layout,
  name: 'Test',
  meta: { title: '测试管理', icon: 'el-icon-goods' },
  children: [
    {
      path: 'test1',
      name: 'Test1',
      component: () => import('@/views/Test/Test1'),
      meta: { title: '测试管理1' }
    },
    {
      path: 'test2',
      name: 'Test2',
      component: () => import('@/views/Test/Test2'),
      meta: { title: '测试管理2' }
    },
  ]
},
];

然后就是相关权限的请求

这里有一个问题,那就是路由的配置,为什么不同用户登录我们的项目,菜单(路由都是一样的)

因为目前的路由是死的,不管你是谁,看到的,操作的都是一样的

活着的路由指的是根据不同用户(角色)可以展示不用菜单

如何实现菜单的权限?不同的用户所能操作|查看菜单不一样的?

起始不同的用户(角色),登录的时候会向服务器发请求,服务器会把用户相应的菜单的权限的信息,返回给我们
我们可以根据服务器返回的数据(信息),可以动态的设置路由,可以根据不同的用户展示不同的菜单。

回到登录界面

发现登录事件跟派发的action有关,查看vuex

这个data打印出来就是服务器返回来的数据

其中包含了:用户名name 用户头像avatar router[返回的标志:不同的用户应该展示那些菜单的标记] roles(用户角色信息)  button 【按钮的信息:按钮权限用的标记】

而我们这里的模板只存了用户名和头像,这个明显是不完整的,将他修改完整

菜单权限:当用户获取用户信息的时候,服务器会把相应的用户拥有菜单的权限信息返回,需要根据用户身份对比出,当前这个用户需要展示哪些菜单

当用户登录的时候,服务器端会返回相应角色的菜单权限的信息
只不过返回信息是一个数组routes-->['sku','spu',produt']

然后回到router当中,把项目中的路由进行拆分

我们需要拆分出

常量路由:就是不管用户是什么角色(超级管理员,普通员工),都可以看见的路由例如登录,404,首页

异步路由:不同的角色,需要过滤选出的路由,称之为异步路由

任意路由:当路径出现错误的时候重新定位到404

然后根据这三种路由根据不同情况进行筛选

服务器返回来的路由信息跟我们的异步路由进行对比,判断是否显示

回到vuex中

先把异步路由引入进来

定义一个函数:俩个数组进行对比,对比出当前用户到底显示那些异步路由

但我们这些操作只是vuex保存当前用户的异步路由,注意,一个用户需要展示完成路由:常量,异步,任意路由,因此我们需要计算出当前用户展示的所有路由

1.首先需要将这三个路由先引入进来

2.在state中招一个变量用来存储它

3.算出当前用户展示的所有路由

展示出了所有需要展示的路由,但是左侧依旧还是一样,这个是因为我们在路由当中设置的是把常量路由写死的

因此我们需要添加新的路由

1.先引入router

2.给路由器添加新的路由

但并没有效果,这个是因为这个模板取的只有常量路由

到这里就完成了菜单的权限

之前权限界面无法显示这个是因为接口有问题,只需要添加/dev-api即可

显示成功 

按钮权限

菜单权限:不同的用户(角色),能操作、能观看的菜单是不同的。

 按钮的权限:不同的用户(角色),有的用户的是可见按钮、当然有的用户不可见。

 vue elementUI tree树形控件获取父节点ID的实例
        修改源码:
        情况1: element-ui没有实现按需引入打包
          node_modules\element-ui\lib\element-ui.common.js    25382行修改源码  去掉 'includeHalfChecked &&'
          // if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
          if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
        情况2: element-ui实现了按需引入打包
          node_modules\element-ui\lib\tree.js    1051行修改源码  去掉 'includeHalfChecked &&'
          // if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {
          if ((child.checked || child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) {

为什么给了测试管理的权限,左侧菜单却没显示“测试管理”。因为没这个路由组件,所以建一个就有了

先写相应的组件

然后配置异步路由

效果实现

v-show="$store.state.user.buttons.indexOf('btn.Add1')!=-1"

通过这种方式可以实现对按钮权限的控制

完整效果展示

完整项目如下

Chicksqace/vue_project at Branch_088eb50c (github.com)

记得切换分支到Branch_088eb50c当中

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

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

相关文章

微信小程序的医院体检预约管理系统springboot+uniapp+python

本系统设计的目的是建立一个简化信息管理工作、便于操作的体检导引平台。共有以下四个模块: uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 语言:pythonjavanode.js…

OpenCV 16 - Qt使用opencv视觉库

1 下载好opencv视觉库 不知道怎么下载和编译opencv视觉库的可以直接使用这个 : opencvcv_3.4.2_qt 2 解压opencv包 3 打开opencv的安装目录 4.打开x86/bin 复制里面所有的dll文件,黏贴到C/windows/syswow64里面 5 新建Qt项目 6 修改pro文件:添加对应的头文件和库文件…

实验室储样瓶耐强酸强碱PFA材质试剂瓶适用新材料半导体

PFA,全名可溶性聚四氟乙烯,试剂瓶又叫取样瓶、样品瓶、广口瓶、储样瓶等。主要用于痕量分析、同位素分析等实验室,广泛应用于新兴的半导体、新材料、多晶硅、硅材、微电子等行业。 规格参考:30ml、60ml、100ml、125ml、250ml、30…

Ant for Blazor做单个表的增删查改

Ant for Blazor做单个表的增删查改 2024年02月27日花了一天时间弄出来了,基本弄好了,vs2022blazor servernet8,引用的AntDesign版本是0.17.4 代码里的model和repository是用自己牛腩代码生成器生成的东西,sqlsugar的,记得在prog…

【第二十五课】动态规划:01背包问题(acwing-2 / 思路 / c++代码 (二维数组))

目录 前言 acwing-2 01背包问题 思路 思路误区(可跳) 代码 嗯,,在网上搜了一下蓝桥杯动态规划好像出题比较多,也没有任何其他建议,现在进度可能比较慢,所以就想着先学动态规划再看数论吧,不知道对不…

【STM32备忘录】【STM32WB系列的BLE低功耗蓝牙】一、测试广播配置搜不到信号的注意事项

文章目录 一、预备知识:二、准备工具:三、FUS和无线协议栈更新流程四、广播例程测试五、DEBUG输出调试 一、预备知识: WB系列是双核单片机,用户写M4,无线协议栈使用M0新买到手的单片机,需要自己刷入使用的…

栈的概念及应用

目录 一. 概念 二. 栈的使用 三. 栈的模拟实现 四. 栈的应用 1. 改变元素的序列 2. 将递归转化为循环 3. 括号匹配 链接 4. 逆波兰表达式求值 链接 5. 出栈入栈次序匹配 链接 6. 最小栈 链接 一. 概念 栈 :一种特殊的线性表,其 只允许在固定的…

书生·浦语大模型图文对话Demo搭建

前言 本节我们先来搭建几个Demo来感受一下书生浦语大模型 InternLM-Chat-7B 智能对话 Demo 我们将使用 InternStudio 中的 A100(1/4) 机器和 InternLM-Chat-7B 模型部署一个智能对话 Demo 环境准备 在 InternStudio 平台中选择 A100(1/4) 的配置,如下图所示镜像…

使用Docker部署Nacos集群和Nginx高可用负载(9节点集群部署)

文章目录 🔊博主介绍🥤本文内容部署Nacos集群Nginx高可用负载 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客专家、51CTO专家博主、阿里云专…

C#,动态规划(DP)N皇后问题(N Queen Problem)的回溯(Backtracking)算法与源代码

1 N皇后问题(N Queen Problem) 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 2 回溯算法 回溯算法实际上一个类似枚…

我把steam游戏搬砖当副业,一个月赚7K+想给有梦想的人提个醒

假如你不工作了,还有收入吗?去掉日常的开销,还剩多少呢?可以靠steam游戏搬砖项目翻身吗?总以为,只要卖力工作,努力赚钱,就能实现财富自由。殊不知, 你的死工资&#xff0…

如何在Linux Ubuntu系统使用Docker快速部署MongoDB并公网访问

文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Mon…

TypeScript 用起来真是太痛苦了

此前我写了几篇文章,关于 Electron,关于 Vue,创建项目的时候,我都默认选择了使用 TypeScript 的模板,不过我都加了一句话,初学者如果不想自己找麻烦的话,最好不要使用 TypeScript。原因呢&#…

QT-Day5

思维导图 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);if(!db.contains("stuInfo.db")){//说明数据库不存在db QSqlDatabase::addDatabase("…

TikTok矩阵系统的功能展示:深入解析与源代码分享!

今天我来和大家说说TikTok矩阵系统,在当今数字化时代,社交媒体平台已成为人们获取信息、交流思想和娱乐放松的重要渠道,其中,TikTok作为一款全球知名的短视频社交平台,凭借其独特的创意内容和强大的算法推荐系统&#…

20. 【Linux教程】emacs 编辑器

前面小节介绍了如何使用 vim 编辑器和 nano 编辑器,本小节介绍 emacs 编辑器,emacs 编辑器最开始是作为控制台的编辑器,并且 emacs 编辑器仍然提供最早的命令行模式。 1. 检查 Linux 系统中是否安装 emacs 编辑器 使用如何命令检查 emacs 编…

小主机折腾记22

最近总是心不在焉,于是决定把家里的海景房机箱升级下,顺便把之前剩的x99散热器,蓝宝石RX590,内存硬盘等利用上 咸鱼买了一个长城G6 淘宝买了一张X99D4M4(4相8倍供电那款) 今天主板到了,开整 先测…

DO-248C:Do-178C和Do-278A的支持信息-常见问题解答 (FAQ) (2)

3.0 常见问题解答 (FAQ) FREQUENTLY ASKED QUESTIONS (FAQ) 本节汇总了 DO-178C 和 DO-278A 常见问题解答。 常见问题解答的目的是对业界经常提出的有关 DO-178C 和/或 DO-278A 材料的问题提供简短而简洁的答复。 这些问题经常向认证机构或提供 DO-178C 和/或 DO-278A 解释的其…

韩国突发:将批准比特币ETF

作者:秦晋 韩国两党宣布将批准比特币ETF。比特币也再次成为竞选的宠儿。 4月10日,韩国将迎来每隔4年而进行的一次立法大选。在大选之前,现执政党与反对党都承诺将批准比特币ETF。 我们知道,比特币的主要受众群体以年轻人居多。此前…

四、分类算法 - 决策树

目录 1、认识决策树 2、决策树分类原理详解 3、信息论基础 3.1 信息 3.2 信息的衡量 - 信息量 - 信息熵 3.3 决策树划分的依据 - 信息增益 3.4 案例 4、决策树API 5、案例:用决策树对鸢尾花进行分类 6、决策树可视化 7、总结 8、案例:泰坦尼…
最新文章