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

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

说明

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



效果

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

3319d0d51118451f89591d81a9659fa9.png



函数式组件

<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>


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

目录
相关文章
|
13天前
|
JavaScript
vue实现任务周期cron表达式选择组件
vue实现任务周期cron表达式选择组件
72 4
|
3天前
|
存储 JavaScript 前端开发
基于 ant-design-vue 和 Vue 3 封装的功能强大的表格组件
VTable 是一个基于 ant-design-vue 和 Vue 3 的多功能表格组件,支持列自定义、排序、本地化存储、行选择等功能。它继承了 Ant-Design-Vue Table 的所有特性并加以扩展,提供开箱即用的高性能体验。示例包括基础表格、可选择表格和自定义列渲染等。
|
5月前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
171 64
|
5月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
226 64
|
JavaScript 前端开发
常用的vue指令语法用法
常用的vue指令语法用法
70 0
|
JavaScript 索引
vue指令作用以及用法
vue指令作用以及用法
|
11月前
|
JavaScript
Vue中的v-bind指令的用法有哪些?
Vue中的v-bind指令的用法有哪些?
210 37
|
JavaScript 开发者 容器
vue指令和用法
vue指令和用法
|
JavaScript
vue指令用法
Vue.js中的指令是Vue的核心概念之一,它用于将数据绑定到DOM元素,让Vue响应用户操作,更新数据,并将数据同步到视图上。
81 0
|
JavaScript 前端开发
常用的vue指令语法用法
常用的vue指令语法用法
100 0
下一篇
oss创建bucket