vue根据权限动态渲染按钮、组件等的函数式组件实现

 更新时间:2023年11月09日 10:25:28   作者:donggua_123  
这篇文章主要介绍了vue根据权限动态渲染按钮、组件等的函数式组件实现方式,具有很好的参考价值,希望杜大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前端工作中对于权限的需求是难免的,最近项目中就有这样的需求了。

后台管理员可以新增前台成员,不通的成员具有不同的权限,有权限的人员可以看到一些操作按钮或者数据列表,反之则看不到。

那么也就是说,前端需要根据登录用户的权限来渲染指定的dom。

1、components文件下新建authorized文件夹

文件夹下新建auth.js校验权限

const checkAuth = (authName) => {
    let authMap = ['admin', 'superAdmin', 'admin-1', 'landq'] // 根据实际项目需求配置
    return authMap.includes(authName);
}
export default checkAuth;

这里的authMap可以是从后台动态请求的,也可以是前端配置好的,甚至可以是其它格式的数据,根据各人业务需求处理,大致思路是一样的。

2、authorized文件夹下新建index.vue

<!-- 函数式组件 -->
<script>
import checkAuthorized from './auth';
export default {
    functional: true, // 函数式组件
    props: {
        // 接收参数
        authName: {
            type: String,
            required: true,
            default: ''
        }
    },
    render(h, context) {
        let { props, scopedSlots } = context;
        return checkAuthorized(props.authName)
            ? scopedSlots.default({
                  name: props.authName
              })
            : null;
    }
};
</script>

这里接收一个参数,登录用户名,在render函数里做进一步判断,如果权限为true则返回默认插槽里的dom,即渲染指定元素,反之返回null,不渲染

3、全局注册main.js

、、、
import Authorized from '@/components/authorized'; // 权限
 
Vue.config.productionTip = false;
Vue.component('Authorized', Authorized);
 
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount("#app");

4、使用

<!-- authorized -->
<template>
    <div class="authorized">
        <Authorized authName="admin">
            <el-button type="primary" slot-scope="data">{{
                data.name
            }}</el-button>
        </Authorized>
    </div>
</template>
<script>
export default {
    components: {},
    data() {
        return {};
    },
    created() {},
    //生命周期 - 挂载完成(可以访问DOM元素)
    mounted() {},
    computed: {},
    //方法集合
    methods: {}
};
</script>
<style lang='scss' scoped>
//@import url(); 引入公共css类
</style>

当authName='admin'时,admin在authMap数组中,按钮渲染了

当authName='123'时便不会渲染

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于vue状态过渡transition不起作用的原因解决

    关于vue状态过渡transition不起作用的原因解决

    这篇文章主要介绍了关于vue状态过渡transition不起作用的原因解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-04-04
  • Vuejs使用addEventListener的事件如何触发执行函数的this

    Vuejs使用addEventListener的事件如何触发执行函数的this

    这篇文章主要介绍了Vuejs使用addEventListener的事件触发执行函数的this方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Vue+Vuex实现自动登录的知识点详解

    Vue+Vuex实现自动登录的知识点详解

    在本篇文章里小编给大家整理的是关于Vue+Vuex实现自动登录的知识点详解,需要的朋友们可以学习下。
    2020-03-03
  • 在vue中实现表单验证码与滑动验证功能的代码详解

    在vue中实现表单验证码与滑动验证功能的代码详解

    在Web应用程序中,表单验证码和滑动验证是常见的安全机制,用于防止恶意攻击和机器人攻击,本文将介绍如何使用Vue和vue-verify-code库来实现表单验证码和滑动验证功能,需要的朋友可以参考下
    2023-06-06
  • vue2.0 keep-alive最佳实践

    vue2.0 keep-alive最佳实践

    这篇文章主要为大家详细介绍了vue2.0 keep-alive的最佳实践,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Vue实现省市区级联下拉选择框

    Vue实现省市区级联下拉选择框

    这篇文章主要为大家详细介绍了Vue实现省市区级联下拉选择框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • Vue.js学习笔记之常用模板语法详解

    Vue.js学习笔记之常用模板语法详解

    本篇文章主要介绍了Vue.js学习笔记之常用模板语法详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • vue+elementUI实现动态面包屑

    vue+elementUI实现动态面包屑

    这篇文章主要为大家详细介绍了vue+elementUI实现动态面包屑,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Vue监测一个div宽度变化的几种方法汇总

    Vue监测一个div宽度变化的几种方法汇总

    这篇文章主要介绍了在Vue中监测div宽度变化的四种方法:使用ResizeObserver、结合Vue的watch、使用window resize事件和引入第三方库,每种方法都有其适用场景和注意事项,推荐首选ResizeObserver,因为它性能高且代码简洁,需要的朋友可以参考下
    2026-03-03
  • Vue elementui如何实现表格selection的默认勾选

    Vue elementui如何实现表格selection的默认勾选

    这篇文章主要介绍了Vue elementui如何实现表格selection的默认勾选问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06

最新评论