Files
laws_chery_client/src/utils/hasPermission.js
T
2024-06-11 15:39:01 +08:00

197 lines
5.8 KiB
JavaScript

import { USER_AUTH, SYS_BUTTON_AUTH } from '@/store/mutation-types'
const hasPermission = {
install (Vue) {
Vue.directive('has', {
inserted: (el, binding, vnode) => {
// console.time()
// 节点权限处理,如果命中则不进行全局权限处理
if (!filterNodePermission(el, binding, vnode)) {
filterGlobalPermission(el, binding, vnode)
}
}
})
}
}
/**
* 流程节点权限控制
*/
export function filterNodePermission (el, binding, vnode) {
const permissionList = []
try {
const obj = vnode.context.$props.formData
if (obj) {
const bpmList = obj.permissionList
for (const bpm of bpmList) {
if (bpm.type + '' !== '2') {
permissionList.push(bpm)
}
}
} else {
return false
}
} catch (e) {
// console.log("页面权限异常----", e);
}
if (permissionList === null || permissionList === '' || permissionList === undefined || permissionList.length <= 0) {
// el.parentNode.removeChild(el)
return false
}
console.log('流程节点页面权限--NODE--')
const permissions = []
for (const item of permissionList) {
if (item.type + '' !== '2') {
permissions.push(item.action)
}
}
// console.log("页面权限----"+permissions);
// console.log("页面权限----"+binding.value);
if (!permissions.includes(binding.value)) {
// el.parentNode.removeChild(el)
return false
} else {
for (const item2 of permissionList) {
if (binding.value === item2.action) {
return true
}
}
}
return false
}
/**
* 全局权限控制
*/
export function filterGlobalPermission (el, binding) {
const permissionList = []
const allPermissionList = []
// let authList = Vue.ls.get(USER_AUTH);
const authList = JSON.parse(sessionStorage.getItem(USER_AUTH) || '[]')
for (const auth of authList) {
if (auth.type + '' !== '2') {
permissionList.push(auth)
}
}
// console.log("页面权限--Global--",sessionStorage.getItem(SYS_BUTTON_AUTH));
const allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || '[]')
for (const gauth of allAuthList) {
if (gauth.type + '' !== '2') {
allPermissionList.push(gauth)
}
}
// 设置全局配置是否有命中
let invalidFlag = false// 无效命中
if (allPermissionList && allPermissionList.length > 0) {
for (const itemG of allPermissionList) {
if (binding.value === itemG.action) {
if (itemG.status + '' === '0') {
invalidFlag = true
break
}
}
}
}
if (invalidFlag) {
return
}
if (permissionList === null || permissionList === '' || permissionList === undefined || permissionList.length <= 0) {
el.parentNode.removeChild(el)
return
}
const permissions = []
for (const item of permissionList) {
// 权限策略1显示2禁用
if (item.type + '' !== '2') {
// update--begin--autor:wangshuai-----date:20200729------for:按钮权限,授权标识的提示信息是多个用逗号分隔逻辑处理 gitee#I1OUGU-------
if (item.action) {
if (item.action.includes(',')) {
const split = item.action.split(',')
for (let i = 0; i < split.length; i++) {
if (!split[i] || split[i].length === 0) {
continue
}
permissions.push(split[i])
}
} else {
permissions.push(item.action)
}
}
// update--end--autor:wangshuai-----date:20200729------for:按钮权限,授权标识的提示信息是多个用逗号分隔逻辑处理 gitee#I1OUGU------
}
}
if (!permissions.includes(binding.value)) {
el.parentNode.removeChild(el)
}
}
/**
* 根据授权标识是否拥有该权限,用于tab页签的权限
*/
export function isHasPermission (permissionIdentifier) {
const permissionList = []
const allPermissionList = []
// let authList = Vue.ls.get(USER_AUTH);
const authList = JSON.parse(sessionStorage.getItem(USER_AUTH) || '[]')
for (const auth of authList) {
if (auth.type + '' !== '2') {
permissionList.push(auth)
}
}
// console.log("页面权限--Global--",sessionStorage.getItem(SYS_BUTTON_AUTH));
const allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || '[]')
for (const gauth of allAuthList) {
if (gauth.type + '' !== '2') {
allPermissionList.push(gauth)
}
}
// 设置全局配置是否有命中
let invalidFlag = false// 无效命中
if (allPermissionList && allPermissionList.length > 0) {
for (const itemG of allPermissionList) {
if (permissionIdentifier === itemG.action) {
if (itemG.status + '' === '0') {
invalidFlag = true
break
}
}
}
}
if (invalidFlag) {
return
}
if (permissionList === null || permissionList === '' || permissionList === undefined || permissionList.length <= 0) {
return false
}
const permissions = []
for (const item of permissionList) {
// 权限策略1显示2禁用
if (item.type + '' !== '2') {
// update--begin--autor:wangshuai-----date:20200729------for:按钮权限,授权标识的提示信息是多个用逗号分隔逻辑处理 gitee#I1OUGU-------
if (item.action) {
if (item.action.includes(',')) {
const split = item.action.split(',')
for (let i = 0; i < split.length; i++) {
if (!split[i] || split[i].length === 0) {
continue
}
permissions.push(split[i])
}
} else {
permissions.push(item.action)
}
}
// update--end--autor:wangshuai-----date:20200729------for:按钮权限,授权标识的提示信息是多个用逗号分隔逻辑处理 gitee#I1OUGU------
}
}
if (!permissions.includes(permissionIdentifier)) {
return false
}
return true
}
export default hasPermission