import {USER_AUTH, SYS_BUTTON_AUTH} from "@/store/mutation-types" export function disabledAuthFilter(code, formData) { if (nodeDisabledAuth(code, formData)) { return true; } else { return globalDisabledAuth(code); } } function nodeDisabledAuth(code, formData) { //console.log("页面权限禁用--NODE--开始"); let permissionList = []; try { //console.log("页面权限禁用--NODE--开始",formData); if (formData) { let bpmList = formData.permissionList; permissionList = bpmList.filter(item => item.type == '2') // for (let bpm of bpmList) { // if(bpm.type == '2') { // permissionList.push(bpm); // } // } } else { return false; } } catch (e) { //console.log("页面权限异常----", e); } if (permissionList.length == 0) { return false; } console.log("流程节点页面权限禁用--NODE--开始"); let permissions = []; for (let item of permissionList) { if (item.type == '2') { permissions.push(item.action); } } //console.log("页面权限----"+code); if (!permissions.includes(code)) { return false; } else { for (let item2 of permissionList) { if (code === item2.action) { console.log("流程节点页面权限禁用--NODE--生效"); return true; } } } return false; } function globalDisabledAuth(code) { //console.log("全局页面禁用权限--Global--开始"); let permissionList = []; let allPermissionList = []; //let authList = Vue.ls.get(USER_AUTH); let authList = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); for (let auth of authList) { if (auth.type == '2') { permissionList.push(auth); } } //console.log("页面禁用权限--Global--",sessionStorage.getItem(SYS_BUTTON_AUTH)); let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); for (let gauth of allAuthList) { if (gauth.type == '2') { allPermissionList.push(gauth); } } //设置全局配置是否有命中 let gFlag = false;//禁用命中 let invalidFlag = false;//无效命中 if (allPermissionList != null && allPermissionList != "" && allPermissionList != undefined && allPermissionList.length > 0) { for (let itemG of allPermissionList) { if (code === itemG.action) { if (itemG.status == '0') { invalidFlag = true; break; } else { gFlag = true; break; } } } } if (invalidFlag) { return false; } if (permissionList === null || permissionList === "" || permissionList === undefined || permissionList.length <= 0) { return gFlag; } let permissions = []; for (let item of permissionList) { if (item.type == '2') { permissions.push(item.action); } } //console.log("页面禁用权限----"+code); if (!permissions.includes(code)) { return gFlag; } else { for (let item2 of permissionList) { if (code === item2.action) { //console.log("全局页面权限解除禁用--Global--生效"); gFlag = false; } } return gFlag; } } export function colAuthFilter(columns, pre) { let authList = getNoAuthCols(pre); const cols = columns.filter(item => { if (hasColoum(item, authList)) { return true } return false }) return cols } /** * 【子表行编辑】实现两个功能: * 1、隐藏JEditableTable无权限的字段 * 2、禁用JEditableTable无权限的字段 * @param columns * @param pre * @returns {*} */ export function colAuthFilterJEditableTable(columns, pre) { let authList = getAllShowAndDisabledAuthCols(pre); const cols = columns.filter(item => { let oneAuth = authList.find(auth => { return auth.action === pre + item.key; }); if (!oneAuth) { return true } //代码严谨处理,防止一个授权标识,配置多次 if (oneAuth instanceof Array) { oneAuth = oneAuth[0] } //禁用逻辑 if (oneAuth.type == '2' && !oneAuth.isAuth) { item["disabled"] = true return true } //隐藏逻辑逻辑 if (oneAuth.type == '1' && !oneAuth.isAuth) { return false } return true }) return cols } function hasColoum(item, authList) { if (authList.includes(item.dataIndex)) { return false } return true } //权限无效时不做控制,有效时控制,只能控制 显示不显示 //根据授权码前缀获取未授权的列信息 export function getNoAuthCols(pre) { if (!pre || pre.length == 0) { return [] } let permissionList = []; let allPermissionList = []; //let authList = Vue.ls.get(USER_AUTH); let authList = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); for (let auth of authList) { //显示策略,有效状态 if (auth.type == '1' && startWith(auth.action, pre)) { permissionList.push(substrPre(auth.action, pre)); } } //console.log("页面禁用权限--Global--",sessionStorage.getItem(SYS_BUTTON_AUTH)); let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); for (let gauth of allAuthList) { //显示策略,有效状态 if (gauth.type == '1' && gauth.status == '1' && startWith(gauth.action, pre)) { allPermissionList.push(substrPre(gauth.action, pre)); } } const cols = allPermissionList.filter(item => { if (permissionList.includes(item)) { return false; } return true; }) return cols; } /** * 将Online的行编辑按钮权限,添加至本地存储 */ export function addOnlineBtAuth2Storage(pre, authList) { let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); let newAuthList = allAuthList.filter(item => { if (!item.action) { return true } return item.action.indexOf(pre) < 0 }) if (authList && authList.length > 0) { for (let item of authList) { newAuthList.push({ action: pre + item, type: 1, status: 1 }) } let temp = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); let newArr = temp.filter(item => { if (!item.action) { return true } return item.action.indexOf(pre) < 0 || authList.indexOf(item.action.replace(pre, '')) < 0 }) sessionStorage.setItem(USER_AUTH, JSON.stringify(newArr)) } sessionStorage.setItem(SYS_BUTTON_AUTH, JSON.stringify(newAuthList)) } /** * 额外增加方法【用于行编辑组件】 * date: 2020-04-05 * author: scott * @param pre * @returns {*[]} */ function getAllShowAndDisabledAuthCols(pre) { //用户拥有的权限 let userAuthList = JSON.parse(sessionStorage.getItem(USER_AUTH) || "[]"); //全部权限配置 let allAuthList = JSON.parse(sessionStorage.getItem(SYS_BUTTON_AUTH) || "[]"); let newAllAuthList = allAuthList.map(function (item, index) { let hasAuthArray = userAuthList.filter(u => u.action === item.action); if (hasAuthArray && hasAuthArray.length > 0) { item["isAuth"] = true } return item; }) return newAllAuthList; } function startWith(str, pre) { if (pre == null || pre == "" || str == null || str == "" || str.length == 0 || pre.length > str.length) return false; if (str.substr(0, pre.length) == pre) return true; else return false; } function substrPre(str, pre) { return str.substr(pre.length); }