vue根據(jù)權(quán)限動(dòng)態(tài)渲染按鈕、組件等的函數(shù)式組件實(shí)現(xiàn)
前端工作中對(duì)于權(quán)限的需求是難免的,最近項(xiàng)目中就有這樣的需求了。
后臺(tái)管理員可以新增前臺(tái)成員,不通的成員具有不同的權(quán)限,有權(quán)限的人員可以看到一些操作按鈕或者數(shù)據(jù)列表,反之則看不到。
那么也就是說(shuō),前端需要根據(jù)登錄用戶的權(quán)限來(lái)渲染指定的dom。
1、components文件下新建authorized文件夾
文件夾下新建auth.js校驗(yàn)權(quán)限
const checkAuth = (authName) => {
let authMap = ['admin', 'superAdmin', 'admin-1', 'landq'] // 根據(jù)實(shí)際項(xiàng)目需求配置
return authMap.includes(authName);
}
export default checkAuth;這里的authMap可以是從后臺(tái)動(dòng)態(tài)請(qǐng)求的,也可以是前端配置好的,甚至可以是其它格式的數(shù)據(jù),根據(jù)各人業(yè)務(wù)需求處理,大致思路是一樣的。
2、authorized文件夾下新建index.vue
<!-- 函數(shù)式組件 -->
<script>
import checkAuthorized from './auth';
export default {
functional: true, // 函數(shù)式組件
props: {
// 接收參數(shù)
authName: {
type: String,
required: true,
default: ''
}
},
render(h, context) {
let { props, scopedSlots } = context;
return checkAuthorized(props.authName)
? scopedSlots.default({
name: props.authName
})
: null;
}
};
</script>這里接收一個(gè)參數(shù),登錄用戶名,在render函數(shù)里做進(jìn)一步判斷,如果權(quán)限為true則返回默認(rèn)插槽里的dom,即渲染指定元素,反之返回null,不渲染
3、全局注冊(cè)main.js
、、、
import Authorized from '@/components/authorized'; // 權(quán)限
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() {},
//生命周期 - 掛載完成(可以訪問(wèn)DOM元素)
mounted() {},
computed: {},
//方法集合
methods: {}
};
</script><style lang='scss' scoped> //@import url(); 引入公共css類 </style>
當(dāng)authName='admin'時(shí),admin在authMap數(shù)組中,按鈕渲染了

當(dāng)authName='123'時(shí)便不會(huì)渲染

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
VUE2.0+ElementUI2.0表格el-table實(shí)現(xiàn)表頭擴(kuò)展el-tooltip
這篇文章主要介紹了VUE2.0+ElementUI2.0表格el-table實(shí)現(xiàn)表頭擴(kuò)展el-tooltip,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-11-11
Javascript vue.js表格分頁(yè),ajax異步加載數(shù)據(jù)
這篇文章主要介紹了Javascript vue.js表格分頁(yè),ajax異步加載數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2016-10-10
Vue通過(guò)provide inject實(shí)現(xiàn)組件通信
這篇文章主要介紹了Vue通過(guò)provide inject實(shí)現(xiàn)組件通信,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
Vue?先初始化父組件再初始化子組件的方法(自定義父子組件mounted執(zhí)行順序)
這篇文章主要介紹了Vue?先初始化父組件再初始化子組件的方法(自定義父子組件mounted執(zhí)行順序),本篇內(nèi)容內(nèi)容主要講述了,在使用?Konva?進(jìn)行開(kāi)發(fā)過(guò)程中遇到的一些問(wèn)題,需要的朋友可以參考下2024-07-07
Vue實(shí)現(xiàn)刷新當(dāng)前頁(yè)面的三種方式總結(jié)
項(xiàng)目當(dāng)中如果做新增/修改/刪除等等操作通常情況下都需要刷新數(shù)據(jù)或者刷新當(dāng)前頁(yè)面。本文為大家整理了三種不同的實(shí)現(xiàn)方法,需要的可以參考一下2023-01-01

