VUE 后台管理系统权限控制
谈一谈VUE 后台管理系统权限控制
前端权限从本质上来讲, 就是控制视图层的展示,比如说是某个页面或者某个按钮,后端权限可以控制某个用户是否能够查询数据, 是否能够修改数据等操作,后端权限大部分是基于RBAC,比如说 一个用户可能会有多个角色,而一个角色可以会有不同权限
开始正题部分了
1. 前端做权限有什么好处?
- 降低非法操作的可能性
- 尽可能排除不必要的请求,降低服务器压力 没必要的请求,不具备权限的请求,应该压根就不要发送, 请求少了,服务器压力自然就很减轻
- 提高用户体验 就给用户展示已有权限的功能,避免在界面上给用户带来困恼
2. 前端权限的控制思路
- 菜单的控制
- 用户没有权限 菜单就不要展示没有的侧边栏
- 界面的控制
- 用户没有登录, 而是在地址栏手动的输入地址, 界面肯定是不能展示的 而我们要强制是跳转到登录界面
- 用户登录了, 但是手动输入跳转到没有权限的界面, 我们要强制跳转到404界面
- 按钮的控制
- 用户进入页面,但是他只有查看权限 , 删除和修改按钮就不应该展示出来
- 请求和响应的控制
- 用户篡改了非常规操作, 比如 禁用的按钮改成启用状态, 此时发送的请求 就应该被拦截
3. Vue的权限控制实现
// 后面的操作都是基于这个结构, 结构可以跟后台沟通
// 后台返回的登陆数据
{
data: [用户名,token 什么的],
rights: [
{
id:1,
authName: '用户管理',
icon: 'icon-user',
children: [
{
id: 1_1,
authName: '用户列表',
path: 'users',
rights: ['view', 'add', 'edit', 'delete']
}
]
},
{
id:2,
authName: '角色管理',
icon: 'icon-tiji',
children: [
{
id: 2_1,
authName: '角色列表',
path: 'roles',
rights: ['view', 'add']
}
]
}
]
}
- 菜单的控制
(1)查看登陆之后的数据
token 用于前端用户的状态保持
rights 该用户具备的权限数据,一级菜单就对应着一级权限,二级菜单就对应二级权限
(2)根据rights数据,动态渲染左侧菜单栏,为了方便使用,一般放在vuex中 但是vuex中的数据在页面刷新就会消失,所以配合本地存储使用,localstoage或者sessionstoage 看产品需求
(3)退出登录的时候 要把本地存储的数据清空 和vuex数据也清空,vuex中数据清空最简单的方法就是 window.location.reload() - 界面的控制
(1)假如用户不进行登陆 ,输入相应页面的网址 也可以进入页面,所有我们要判断用户的是否登录
router.beforeEach((to, form, next )=> {
if (to.path == '/Login') {
next()
} else {
const token = sessionstoage.getItem('token')
if (!token) {
next('/Login')
} else {
next()
}
}
})(2)进行token验证后 ,会发现用户登录后还是可以通过url访问不存在权限的页面
这里就需要使用动态路由
首先在router.js export 一个方法// router.js
import store from '@/sotre' const userRule = { path: '/users', component: Users}
const roleRule = { path: '/roles', component: Roles} // vuex中存放的rightsList中每个path添加到路由中 怎么添加呢??? 请看
users,roles都是跟后台定义好的,所以对号入座
const ruleMapping = {
'users': userRule,
'roles': roleRule
} export function initRoutes () {
const currentRoutes = router.option.routes // 可以拿到router的路由配置信息
const rightsList = store..state.rightsList // 取出vuex存储的用户路由信息
rightsList.forEach(item => {
item.children.forEach(items => {
currentRoutes[2].push(ruleMapping[items.path]) // 这步很关键 把对应的值push进去
})
})
router.addRoutes(currentRoutes)
}在login页面引入 登陆成功的时候调用 要在vuex赋值之后再调用
这时又会发现一个问题, 页面一刷新 访问那个页面都会是404
因为动态添加的路由 一刷新页面就会消失,
哼哼哼,仔细听
我们可以在App页面中created生命周期函数中调用router.js 中initRoutes方法,
你就会发现 页面刷新也没事了 而且登陆的用户通过url跳转没有权限的页面也是不可以了 - 按钮的控制
...
VUE 后台管理系统权限控制的更多相关文章
- vue后台管理系统权限处理
vue后台管理系统权限 1.权限问题:用户和管理员进入管理系统看到的模块是不一样的,管理员看的的要比用户看到的多.需要用到动态加载路由,router.addRouters()来动态的挂载路由 // 1 ...
- 基于Vue实现后台系统权限控制
原文地址:http://refined-x.com/2017/08/29/基于Vue实现后台系统权限控制/,转载请注明出处. 用Vue/React这类双向绑定框架做后台系统再适合不过,后台系统相比普通 ...
- vue实现菜单权限控制
大家在做后台管理系统时一般都会涉及到菜单的权限控制问题.当然解决问题的方法无非两种——前端控制和后端控制.我们公司这边的产品迭代速度较快,所以我们是从前端控制路由迭代到后端控制路由.下面我会分别介绍这 ...
- Spring Boot + Spring Cloud 实现权限管理系统 权限控制(Shiro 注解)
技术背景 当前,我们基于导航菜单的显示和操作按钮的禁用状态,实现了页面可见性和操作可用性的权限验证,或者叫访问控制.但这仅限于页面的显示和操作,我们的后台接口还是没有进行权限的验证,只要知道了后台的接 ...
- 如何优雅的在 vue 中添加权限控制
前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...
- 如何在 vue 中添加权限控制管理?---vue中文社区
前言 在一个项目中,一些功能会涉及到重要的数据管理,为了确保数据的安全,我们会在项目中加入权限来限制每个用户的操作.作为前端,我们要做的是配合后端给到的权限数据,做页面上的各种各样的限制. 需求 因为 ...
- springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)
一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...
- vue 后台管理系统菜单权限管理
来自:https://www.cnblogs.com/fqh123/p/11094296.html 侵删 login登录方法 login() { if (!this.username) { retur ...
- 我的第一个python web开发框架(34)——后台管理系统权限设计
框架底层和接口终于改造完成了,小白再次找到老菜. 小白:老大,上次你对后台权限系统简单的讲了一下,我一点头绪都没有,现在有空完整的说一说吗? 老菜:说到权限系统,要讲明白真不容易,权限系统并不是越复杂 ...
随机推荐
- VUE_shop(第十天)项目的打包优化
项目的打包优化 1.添加页面的加载效果 1.首先安装运行依赖nprocess,在main.js文件中的axios拦截器拦截请求的时候调用Npeocees.start. 在拦截响应的时候调用nproce ...
- 汇编刷题:求1000H单元开始的10个无符号字节数的最大值(本题放入了BL寄存器)
DATA SEGMENT ORG 1000H INFO DB 1,2,3,4,5,70H,71H,72H,80H,92H MAX DB 00H DATA ENDS CODE SEGMENT ASSUM ...
- 30.2 案例:ArrayList本身数据可以重复,写出去重的方法
package day30_HashSet; /* * ArrayList特点(实现List接口) 有序.可以重复.可以使用索引 *使用ArrayList实现数据去重 * */ import java ...
- xftp连接centos7
1.下载xftp文件,并正常进行安装 2.安装好之后运行,并新建会话,此时可见如下界面: 注意: 名称,可随便输入,自己能看懂是什么就行 主机,输入当前Linux服务器的ip(如何获取服务器 ...
- centOS7常用操作命令
大多和DOS命令差不多 文件与目录操作 命令 解析 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd - 返回上次所在目录 cp fil ...
- python如何操作excel 基础代码
一 基础操作1打开excel表格并获取表格名称 wookbook = load_workbook(filename = 表格文件路径) (注意只能打开存在的表格,不能用该方法创建一个新表格文件) wo ...
- ConcurrentHashMap 同步安全 的真正含义(stringbuff 是同步安全的,stringbutter 不安全)
同步安全的集合,在多线程下用到这个map是安全的,但这个安全指的是什么?线程安全指的是指get.remove.put等操作时即同一对象,同一时间只有一个线程能在这几个方法上运行,也就是说线程安全是在这 ...
- 数据结构和算法(Golang实现)(15)常见数据结构-列表
列表 一.列表 List 我们又经常听到列表 List数据结构,其实这只是更宏观的统称,表示存放数据的队列. 列表List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序号的数 ...
- Java课程设计之——Web前端
主要使用的技术 Javascript/JQuery html css Jsp 前期调查 能看到的网页大致可以分为两个部分,一个是搜索的首页index.html,一个是搜索结果页/s index.htm ...
- 用Python爬取大众点评数据,推荐火锅店里最受欢迎的食品
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:有趣的Python PS:如有需要Python学习资料的小伙伴可以加点 ...