基于admin-template模板,实现按钮权限管理

Posted 捡黄金的少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于admin-template模板,实现按钮权限管理相关的知识,希望对你有一定的参考价值。

1、创建一个directive文件夹,采用Vue.directive对vue页面节点进行管理

2、创建permission.js,导出一个对象

(1)采用 buttonList.some进行条件过滤。没有使用foreach,询数组中唯一的元素, 用some方法更合适,当查找到相同,后会跳出当前循环,不会再执行内容。(这样就可以节约资源,找到内容了后就不再找了)

(2)、采用 el.parentNode.removeChild(el)移除vue中的节点

  (3)、VueX中状态管理getters的存储的buttonList,buttonList,每个用户按钮权限不同,所以后台返回存储的buttonList也不同。

"buttonList": [
      "article:search",
      "article:audit",
      "article:edit",
      "article:delete",
      "category:search",
      "category:add",
      "category:edit",
      "category:detele",
      "label:search",
      "label:add",
      "label:delete",
      "label:edit",
      "advert:search",
      "advert:add",
      "advert:edit",
      "advert:delete",
      "user:search",
      "user:add",
      "user:edit",
      "user:delete",
      "user:role",
      "user:password",
      "role:search",
      "role:add",
      "role:edit",
      "role:delete",
      "role:permission",
      "menu:search",
      "menu:add",
      "menu:edit",
      "menu:delete"
    ],

//自定义权限指令
import store from '@/store/index'
// 导出一个对象
export default 
    // 指令钩子
    inserted(el, binding) 
        //el 指令作用到哪个元素上
        //获取使用指令时传递的值
        const  value  = binding
        //获取用户当前所拥有的按钮权限
        const buttonList = store.getters && store.getters.buttonList
        if (value) 
            // 用some,不用foreach 因为如果下面为true,则进行终止循环
            const hasPermission = buttonList.some(button => 
                return button === value
            )
            // 如果没有权限,则将元素移除
            if (!hasPermission) 
                el.parentNode && el.parentNode.removeChild(el)
            
        else
            throw new Error("需要权限标识!比如v-permission='article:delete'")
        


    

3、创建index.js,使用 Vue.directive()   全局自定义指令的创建,引入permission.js导出的对象,对元素进行管理.

// 引入所有要注册的全局指令
import permission from './permission'
// 将permission文件导出的对象引入
export default (Vue) => 
    // 第一个参数为指令名称,v-permission 使用,
    // 注意在生命指令名时候,不能加v-
    Vue.directive('permission', permission)

// 然后在main.js 中全局引入这个文件

4、全局引入directIve下面的index.js文件

import directive from '@/directive'//导入自定义指令
Vue.use(directive)

5、按钮上使用,使用 v-permission="'article:delete'"对权限的绑定

<el-button
          v-permission="'article:delete'"
            size="mini"
            v-if="scope.row.status !== 0"
            @click="handleDelete(scope.row.id)"
            type="danger"
            >删除</el-button
          >

以上是关于基于admin-template模板,实现按钮权限管理的主要内容,如果未能解决你的问题,请参考以下文章

基于admin-template模板请求头带上Token

2rbac组件 后台布局模板,权限粒度控制,权限按钮

基于Laravel+Layui实现的RBAC权限管理系统

基于角色的权限管理系统

基于PHP语言Laravel+Layui实现的权限控制系统

免费RTL引导程序3管理模板