Vue + Element UI 实现权限管理系统:页面权限控制(菜单 + 按钮) |
您所在的位置:网站首页 › 菜单权限管理功能有哪些 › Vue + Element UI 实现权限管理系统:页面权限控制(菜单 + 按钮) |
权限控制方案
既然是后台权限管理系统,当然少不了权限控制啦,至于权限控制,前端方面当然就是对页面资源的访问和操作控制啦。 前端资源权限主要又分为两个部分,即导航菜单的查看权限和页面增删改操作按钮的操作权限。 菜单类型 菜单类型代码页面资源的类型。类型包括,0:目录 1:菜单 2:按钮’。 根据为不同角色分配相应的资源进行展示不同的导航菜单 以及按钮形式。角色分配的有哪些菜单或者按钮,页面显示出相应的菜单或者按钮。(只解释前端部分,以及数据结构样式,可让后端根据数据结构进行处理数据。)数据结构例子: 权限标识 权限标识即是代表此页面资源,用来进行权限控制的唯一标识,主要是进行增删改查的权限控制。 权限标识包括,sys:user:add:新增 sys:user:edit:编辑 sys:user:delete:删除 sys:user:view:查看。 注:权限标识符可以根据实际情况 定义 例如 第一步 我们需要具有一个权限资源列表 去管理我们所有的权限资源 包括 菜单 按钮等 这里我采用的是一个树形表格控件 这里 添加 编辑的表单不在解释 就是简单的表单提交 管理好我们的这个列表之后 第二步: 有自己的账号管理模块 以及角色管理模块 为自己的账号 分配角色 一般情况下 一个账号对应一个角色 这里不做主要解释 第三步: 对账号分配完角色,需要对角色分配资源,保证我们菜单以及按钮的可控性。 这里不再做过多解释,就是正常的分配权限 包括 按钮权限和菜单权限 可以同步分配。 PS:如果各位需要 第二步 第三步详细解释 我之后可以进行补充 第四步: 之前已经在登录的时候将所有的菜单权限返回出来了,不返回按钮资源是为了防止 数据往菜单显示的时候按钮资源也会显示出来 ,如若后端数据一起返回按钮资源 前端同样可以通过判断 去除按钮资源 附代码 菜单部分,(可提供到三级菜单) data 对象里的代码不在展示 {{item.menuName}} {{item.menuName}} {{itemChild.menuName}} {{itemChild.menuName}} {{itemChild_Child.menuName}} {{itemChild.menuName}} {{item.menuName}}fontColor 默认颜色 ffffff 这个color 监听可要可不要 ,这个监听主要是监听主题颜色变换,因为如果是白色主题 配上白色字体的话白色字体显示不出来 就去监听下 主题变换 切换字体颜色 防止出现 字体和主题颜色相近 显示不出来的情况,可以去除,只留路由监听即可。 mounted(){ this.menu = JSON.parse(sessionStorage.getItem('MenuList')) this.routter = this.$router.currentRoute.path.slice(1) }, watch: { color(curVal,oldVal){ let col = curVal.replace('#',"") if(this.hex2int(col) > this.hex2int('66FFFF')){ this.fontColor = '#000000' }else{ this.fontColor = '#ffffff' } }, $route(to,form){ this.routter = to.path.slice(1) this.getBtn(this.routter) } }, methods: { getBtn(router){ queryMenuButton({userId:JSON.parse(sessionStorage.getItem('userInfo')).id,menuCode:router}).then(res => { if(res.status == 200){ sessionStorage.setItem('btnList',JSON.stringify(res.data)) } }) }, }通过监听路由 去获取该路由页面所有的被分配按钮资源, 页面操作按钮提供权限标识,查询是否在用户权限标识集合中。 在:有权限,可见或可用,不在:无权限,不可见或禁用。 目前本系统采用的是 按钮标识如果不在权限集合中则不显示 ,反之 则显示。 KtButton.vue 公共按钮组件 {{label}} // import { hasPermission } from '@/permission/index.js' export default { name: 'KtButton', props: { label: { // 按钮显示文本 type: String, default: '' }, size: { // 按钮尺寸 type: String, default: 'mini' }, type: { // 按钮类型 type: String, default: null }, loading: { // 按钮加载标识 type: Boolean, default: false }, disabled: { // 按钮是否禁用 type: Boolean, default: false }, perms: { // 按钮权限标识,外部使用者传入 type: String, default: null }, icon:{ // 按钮权限标识,外部使用者传入 type: String, default: null }, plain: { type: Boolean, default: false } }, data() { return { } }, methods: { handleClick: function () { // 按钮操作处理函数 this.$emit('click', {}) }, hasPerms: function (perms) { // console.log(perms) // if(perms == 1){ // return true // }else{ // return false // } // 根据权限标识和外部指示状态进行权限判断 return this.hasPermission(perms) }, hasPermission (perms) { let hasPermission = false let permissions = JSON.parse(window.sessionStorage.getItem('btnList')) for(let i=0; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |