Vue + Element-ui实现后台管理系统(6)---权限管理思路讲解
权限管理思路讲解
有关后台管理系统之前写过五篇博客,看这篇之前最好先看下这五篇博客。另外这里只展示关键部分代码,项目代码放在github上: mall-manage-system
1、Vue + Element-ui实现后台管理系统(1) --- 总述
2、Vue + Element-ui实现后台管理系统(2) --- 项目搭建 + ⾸⻚布局实现
3、Vue + Element-ui实现后台管理系统(3) --- 面包屑 + Tag标签切换功能
4、Vue + Element-ui实现后台管理系统(4)---封装一个ECharts组件的一点思路
5、Vue + Element-ui实现后台管理系统(5)---封装一个Form表单组件和Table表格组件
这篇主要讲解权限相关的功能:
整体效果
admin用户看到的菜单

xiaoxiao用户看到的菜单

可以发现不同的用户所看到侧边栏的菜单是不一样的。
简单来讲大致需要满足的功能就是:
1、不同的用户会根据权限不同,在后台管理系统渲染不同的菜单栏。
2、用户登陆之后,会获取路由菜单和一个token,之后跳转的页面都需要带着token。
3、用户退出登陆,清除动态路由,清除token。跳转到login页面。
4、如果当前没有token,那么跳转到任何页面都应该重定向到login页面。
一、权限管理代码思路讲解
1、登陆所做的事情
登陆操作应该至少要做三件事情
1、获取当前用户对应的菜单栏的菜单,并存储到vuex和cookies中。
2、获取当前用户的Token,存储到vuex和cookie中
3、获取当前的菜单生成动态路由。
代码
methods: {
login() {
this.$http.post('api/permission/getMenu', this.form).then(res => {
res = res.data
if (res.code === 20000) {
//先清除 房子重复加入
this.$store.commit('clearMenu')
//再加入
this.$store.commit('setMenu', res.data.menu)
//放入token
this.$store.commit('setToken', res.data.token)
//添加动态路由
this.$store.commit('addMenu', this.$router)
//跳转到首页
this.$router.push({ name: 'home' })
} else {
//如果失败 提示失败信息
this.$message.warning(res.data.message)
}
})
}
}
2、退出登陆所做的事情
退出登陆所做的事情就和登陆相反,主要做两件事情1、清除vuex和cookie中的菜单 2、清除vuex和cookie中的token
代码
logOut() {
//清除token
this.$store.commit('clearToken')
//清除菜单
this.$store.commit('clearMenu')
//重定向 一般是登陆页
location.reload()
}
3、路由守卫所做的事
因为是后台管理系统,所以在我们在每切换一个路由都需要判断当前token是否存在,这个时候就需要通过路由守卫来实现。
router.beforeEach((to, from, next) => {
// 防止刷新后vuex里丢失token
store.commit('getToken')
// 防止刷新后vuex里丢失标签列表tagList
store.commit('getMenu')
let token = store.state.user.token
// 过滤登录页,因为去登陆页不需要token(防止死循环)
if (!token && to.name !== 'login') {
next({ name: 'login' })
} else {
next()
}
})
整个过程大家就是这样。现在展示vuex相关的代码。
4、vuex存放token相关方法。
import Cookie from 'js-cookie'
export default {
state: {
token: ''
},
mutations: {
//存放token
setToken(state, val) {
state.token = val
Cookie.set('token', val)
},
//清空token
clearToken(state) {
state.token = ''
Cookie.remove('token')
},
//获取token
getToken(state) {
state.token = Cookie.get('token')
}
},
actions: {}
}
5、vuex存放菜单相关方法
import Cookie from 'js-cookie'
export default {
state: {
menu: []
},
mutations: {
setMenu(state, val) {
//vuex添加
state.menu = val
//cookie也添加
Cookie.set('menu', JSON.stringify(val))
},
clearMenu(state) {
//清除也一样 vuex和cookie都清除
state.menu = []
Cookie.remove('menu')
},
addMenu(state, router) {
if (!Cookie.get('menu')) {
return
}
//取出cookie数据 给vuex
let menu = JSON.parse(Cookie.get('menu'))
state.menu = menu
//添加动态路由 主路由为Main.vue
let currentMenu = [
{
path: '/',
component: () => import(`@/views/Main`),
children: []
}
]
//如果是一级菜单 那么菜单名称肯定有路由 如果是二级菜单那么一级没有 二级有路由
menu.forEach(item => {
if (item.children) {
item.children = item.children.map(item => {
item.component = () => import(`@/views/${item.url}`)
return item
})
currentMenu[0].children.push(...item.children)
} else {
item.component = () => import(`@/views/${item.url}`)
currentMenu[0].children.push(item)
}
})
//添加动态路由
router.addRoutes(currentMenu)
}
},
actions: {}
}
整个电商后台管理系统相关内容到这里就已经写完了。

别人骂我胖,我会生气,因为我心里承认了我胖。别人说我矮,我就会觉得好笑,因为我心里知道我不可能矮。这就是我们为什么会对别人的攻击生气。
攻我盾者,乃我内心之矛(16)
Vue + Element-ui实现后台管理系统(6)---权限管理思路讲解的更多相关文章
- vue中如何实现后台管理系统的权限控制
vuejs单页应用的权限管理实践 一.前言 在广告机项目中,角色的权限管理是卡了挺久的一个难点.首先我们确定的权限控制分为两大部分,其中根据粒的大小分的更细: 接口访问的权限控制 页面的权限控制 菜单 ...
- go-admin基于Gin + Vue + Element UI的前后端分离权限管理系统
✨ 特性 遵循 RESTful API 设计规范 基于 GIN WEB API 框架,提供了丰富的中间件支持(用户认证.跨域.访问日志.追踪ID等) 基于Casbin的 RBAC 访问控制模型 JWT ...
- vue+element搭建的后台管理系统
最近工作不是很忙,自己在学习vue,在网上找了一个简单的项目练练手..... 这是本人的gitHub 上的项目地址:https://github.com/shixiaoyanyan/vue-admin ...
- vue 后台管理系统菜单权限管理
来自:https://www.cnblogs.com/fqh123/p/11094296.html 侵删 login登录方法 login() { if (!this.username) { retur ...
- vue+element 构建的后台管理系统项目(1)新建项目
1.运行 vue init webpack demo 这里的demo是你项目的名字 2.npm run dev 查看项目启动效果 3.安装Element cd 项目 cmd 运行 npm i e ...
- Vue + Element UI 实现权限管理系统
Vue + Element UI 实现权限管理系统 前端篇(一):搭建开发环境 https://www.cnblogs.com/xifengxiaoma/p/9533018.html
- 基于vue(element ui) + ssm + shiro 的权限框架
zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目 ...
- vue+element ui 的上传文件使用组件
前言:工作中用到 vue+element ui 的前端框架,使用到上传文件,则想着封装为组件,达到复用,可扩展.转载请注明出处:https://www.cnblogs.com/yuxiaole/p/9 ...
- Vue+Element UI 实现视频上传
一.前言 项目中需要提供一个视频介绍,使用户能够快速.方便的了解如何使用产品以及注意事项. 前台使用Vue+Element UI中的el-upload组件实现视频上传及进度条展示,后台提供视频上传AP ...
- Vue+element ui table 导出到excel
需求: Vue+element UI table下的根据搜索条件导出当前所有数据 参考: https://blog.csdn.net/u010427666/article/details/792081 ...
随机推荐
- 升腾C92 刷 OpenWrt 作旁路由设置 DNS 服务、扩容分区、设置 swap
最新博客文章链接 文字更新时间:2024/02/04 一直知道 OpenWrt 经常拿来做软路由软件.最近买了个二手小主机升腾 C92 来做旁路由服务器,其被归为瘦客户机一类,感觉和工控机差不多,现价 ...
- 文心一言 VS 讯飞星火 VS chatgpt (195)-- 算法导论14.3 3题
三.用go语言,请给出一个有效的算法,对一个给定的区间i,返回一个与i重叠且具有最小低端点的区间;或者当这样的区间不存在时返回T.nil. 文心一言,去掉math,代码正常运行: 在Go语言中,你可以 ...
- DBGRIDEH 排序 我自己大总结【含DBX,Dac控件】
1.三个属性让DBGridEH可以点击表头自动排序 只要设置下面三个属性: ColumDefValues->Title->TitleButton设为TRUE sortlocal 设为 ...
- 计网学习笔记九 Routing Fundamentals
在这一讲开始讲路由器的控制平面.简单介绍了routing,两个最小cost算法. 参考看的文章: VC网络中的路由 VC网络和数据报网络中路由的区别:Differences between Virtu ...
- hdparm 常用命令介绍
hdparm命令介绍 通常情况下可以使用fdisk.df等命令查看硬盘的分区情况以及当前已使用空间大小.剩余空间大小等信息.但是如果要查看硬盘的硬件信息如 硬盘型号.序列号.已运行时间等信息该用什么工 ...
- JavaFX的目录结构, 项目创建和发布, 基于JDK11+JavaFX SDK17
JDK 和 JavaFX SDK 需要使用JDK11, 推荐使用 https://adoptium.net/releases.html JDK11 JavaFX 11 不再是JDK的一部分, 需要单独 ...
- python中两个不同shape的数组间运算规则
1 前言 声明:本博客讨论的数组间运算是指四则运算,如:a+b.a-b.a*b.a/b,不包括 a.dot(b) 等运算,由于 numpy 和 tensorflow 中都遵循相同的规则,本博客以 nu ...
- pytho代码分析示例
a = 5 b = 6 c = 10 for i in range(n): for j in range(n): x = i * j y = j * j z = i * j for k in rang ...
- 【LeetCode剑指offer#06】实现pow函数、计算x的平方根
实现pow函数 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn ). 示例 1: 输入:x = 2.00000, n = 10 输出:1024.00000 示例 2: 输入:x ...
- 【LeetCode排序专题01】由旋转数组的最小数字引出的关于排序算法的讨论(冒泡排序、二分查找+暴力法)
旋转数组的最小数字 剑指 Offer 11. 旋转数组的最小数字 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 给你一个可能存在 重复 元素值的数组 numbers ,它原来是一 ...