Vue 开发实战实战篇 # 33:更加精细化的权限设计(权限组件权限指令)

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 开发实战实战篇 # 33:更加精细化的权限设计(权限组件权限指令)相关的知识,希望对你有一定的参考价值。

说明

【Vue 开发实战】学习笔记。

效果

实现两种方式实现权限组件的控制,比如下面两个地方的按钮控制,如果是user用户,就没有权限控制

函数式组件

<script>
import  check  from '../utils/auth';
export default 
    functional: true,
    props: 
        authority: 
            required: true,
            type: Array
        ,
    ,
    render(h, context) 
        const  props, scopedSlots  = context;
        return check(props.authority) ? scopedSlots.default() : null;
    

</script>

插件方式的指令

import  check  from '../utils/auth';

function install(Vue, options = ) 
    Vue.directive(options.name || "auth", 
        inserted(el, binding) 
            if(!check(binding.value)) 
                el.parentNode && el.parentNode.removeChild(el);
            
        
    )


export default install;

全局注册

import Vue from "vue";
import App from "./App.vue";
import router from "./router";
import store from "./store";

import  Button, Layout, Icon, Drawer, Radio, Menu  from "ant-design-vue";
import Authorized from "./components/Authorized.vue";
import Auth from "./directives/auth";

Vue.config.productionTip = false;

Vue.use(Button);
Vue.use(Layout);
Vue.use(Icon);
Vue.use(Drawer);
Vue.use(Radio);
Vue.use(Menu);

Vue.component("Authorized", Authorized);
Vue.use(Auth);

new Vue(
  router,
  store,
  render: h => h(App)
).$mount("#app");

使用

<a-icon
    v-auth="['admin']"
    class="trigger"
    :type="collapsed ? 'menu-unfold' : 'menu-fold'"
    @click="collapsed = !collapsed"
></a-icon>

<Authorized :authority="['admin']">
    <SettingDrawer />
</Authorized>

组件式相对来说比较灵活,但是需要用的都要嵌套一层。指令的缺点就是如果权限是动态的,就不好处理,具体可以根据业务选择。

以上是关于Vue 开发实战实战篇 # 33:更加精细化的权限设计(权限组件权限指令)的主要内容,如果未能解决你的问题,请参考以下文章

Vue实战篇|使用路由管理用户权限(动态路由)

VUE项目实战33角色下权限的删除

Vue 开发实战学习笔记48篇(完结)

手摸手,带你用vue撸后台 系列三(实战篇)

Vue 开发实战实战篇 # 27:使用Vue CLI 3快速创建项目

Vue 开发实战实战篇 # 43:如何做好国际化