一但狭、src文件夾下新建utils文件夾披诗,文件夾下新建authoruty.js文件:
/**
* 檢查權(quán)限點(diǎn)工具函數(shù)
* @param {*} permissionCode 元素權(quán)限點(diǎn)
* @param {*} permissions 所有權(quán)限點(diǎn)
*/
export function checkAuthority(permissionCode, permissions) {
let hasPermission = true;
if (permissionCode) {
if (permissionCode instanceof Array && permissionCode.length > 0) {
hasPermission = permissions.some(it =>
permissionCode.includes(it)
);
console.log('permissionCode---', permissionCode)
console.log('hasPermission---1', hasPermission)
} else {
hasPermission = permissions.some(item => item === permissionCode);
console.log('hasPermission---2', hasPermission)
}
}
return hasPermission;
}
二、src文件下新建directive文件夾立磁,隨之再建立Authority文件夾呈队,并在其下新建Authority.js文件和index.js文件,
- Authority.js文件代碼:
import store from "@/store";
import { checkAuthority } from "@/utils/authority";
// console.log('store-----', store.state.user.permission)
console.log("store-----", store);
export default {
inserted(el, binding, vnode) {
const { value } = binding;
const permissions = JSON.parse(localStorage.getItem('permissionData')) || []
console.log('permissionList---', permissions)
const hasPermission = checkAuthority(value, permissions);
if (!hasPermission) {
// eslint-disable-next-line no-unused-expressions
if (el.parentNode) {
el.parentNode.removeChild(el);
} else {
el.innerHTML = "";
}
} else {
el && el.setAttribute("code", value);
}
},
};
- index.js文件代碼:
import authority from './Authority';
// eslint-disable-next-line func-names
const install = function(Vue) {
Vue.directive('authority', authority);
};
if (window.Vue) {
window.authority = authority;
Vue.use(install); // eslint-disable-line
}
authority.install = install;
export default authority;
(備注: 權(quán)限點(diǎn)集合permissionData在登錄時(shí)已經(jīng)存到localStorage里面了唱歧,取值宪摧,直接JSON.parse(localStorage.getItem('permissionData')))
三粒竖、main.js文件里引入:
import AuthorityDirective from '@/directive/Authority/index.js'; // 自定義指令
Vue.use(AuthorityDirective);
四、使用:
<el-button type="primary" v-authority="['Table_Write']">show</el-button>
補(bǔ)充:
權(quán)限點(diǎn)集合是一個(gè)純數(shù)組集合几于,該數(shù)據(jù)模擬從后臺(tái)獲取到的數(shù)據(jù):
permissionData = ['Table_Write', 'Table_Read', 'Form_Write', 'Form_Read']
獲取到后蕊苗,在登錄時(shí)立即存入localStorage。