vue-element-admin权限(角色)使用记录

vue element ui权限处理 - 前端登录时写入role信息
项目来自:https://github.com/PanJiaChen/vue-element-admin.git
具体可参考源码:src\views\permission\directive.vue


三种处理方式:
1.隐藏button  
可以通过使用vue element ui 中 v-permission 属性或 v-if 属性 或 v-show 属性实现。
但是隐藏button会导致用户看不到系统功能,对于系统推广不太好
(1)v-permission
     <el-button type="primary" v-permission="['admin', 'editor']">Confirm</el-button>
     import permission from '@/directive/permission/index.js'
     export default {
       name: '',
       directives: { permission },
     }
(2)v-if
     <span v-if="checkPermission(['admin', 'editor'])">
       <el-button type="primary">Confirm</el-button>
     </span>
     import checkPermission from '@/utils/permission'
     export default {
       name: '',
       methods: {
         checkPermission,
       }
     }
(3)v-show
     <el-button type="primary" v-show="checkPermission(['admin'])">Confirm</el-button>
     import checkPermission from '@/utils/permission'
     export default {
       name: '',
       methods: {
         checkPermission,
       }
     }


2.禁用button  
可以通过:disabled属性实现,但是禁用会导致用户认为该功能不对外开放或者说用户不明白是不是因为自身权限
造成了这个功能的disable
     <el-button type="primary" :disabled="checkPermission(['editor'])">Confirm</el-button>
     import checkPermission from '@/utils/permission'
     export default {
       name: '',
       methods: {
         checkPermission,
       }
     }


3.可点击,弹出没有权限提示
可以在utils\permission.js下添加一个方法,用户操作时候友好提示权限不足,如果想要使用的话,向团队申请,这个要比上面两种方式更友好些
     import Vue from 'vue'
     function isAccess() {
       if (checkPermission(['editor'])){
         Vue.prototype.$message({
           message: 'Permission denied, please contact xxx!',
           type: 'warning',
         })
         return true
       }
       return false
     }

     export { isAccess }
使用的时候
     import { isAccess } from '@/utils/permission'
操作时判断
     if (isAccess()) return false






备注:
1.另一种方式
如果只允许用户访问,不允许修改数据,可以在前端请求拦截器内获取角色信息并进一步拦截请求,
比如提示权限不足等,因为一般涉及后端数据更改都会走请求,即假如所有请求统一走axios的话,
可以大致做如下操作(未测试),这种方式需要维护url,感觉也不是太好
     import axios from 'axios'
     import Vue from 'vue'
     const accessUrlList = [
       '/api/country',
       '/api/city',
       '/api/province'
     ]
     axios.interceptors.request.use(
       config => {
         if (accessUrlList.indexOf(config.url) !== -1 && isAccess()) return config
         Vue.prototype.$message({
           message: 'Permission denied, please contact xxx!',
           type: 'warning',
         })
         return false
       },
       error => {
         return Promise.reject(error)
       }
     )


2.菜单权限控制
通过自带的roles控制即可,非指定role会隐藏菜单,如:
     {
       path: 'user',
       component: () => import('@/views/dashboard/user'),
       name: 'User',
       meta: { title: 'User', noCache: true, roles: ['Admin'] }
     }

 

 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值