diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java b/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java index 767e7372..fcee6a45 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/entity/EmpUser.java @@ -71,6 +71,8 @@ import com.jeesite.common.utils.excel.fieldtype.OfficeType; @Column(name="area_type", label="区域类型"), }), }, +// extFromKeys="dsfOfficeFrom, dsfCompanyFrom", +// extWhereKeys="dsfOfficeWhere, dsfCompanyWhere", extWhereKeys="dsfOffice, dsfCompany", orderBy="a.user_weight DESC, a.update_date DESC" ) diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java b/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java index dfcdde88..3da9b844 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/utils/EmpUtils.java @@ -4,8 +4,10 @@ package com.jeesite.modules.sys.utils; import java.util.List; +import java.util.Set; import com.jeesite.common.collect.ListUtils; +import com.jeesite.common.collect.SetUtils; import com.jeesite.common.lang.StringUtils; import com.jeesite.common.utils.SpringUtils; import com.jeesite.modules.sys.entity.Company; @@ -155,6 +157,33 @@ public class EmpUtils { return list.toArray(new String[list.size()]); } + /** + * 获取当前员工所有机构编码,包括附属机构以及子机构(数据权限用) + * @author ThinkGem + */ + public static String[] getOfficeCodesAndChildren(){ + Set list = SetUtils.newLinkedHashSet(); + Set parentCodess = SetUtils.newHashSet(); + Office currentOffice = getOffice(); + list.add(currentOffice.getOfficeCode()); + parentCodess.add(currentOffice.getParentCodes() + currentOffice.getOfficeCode() + ","); + // 添加附属机构 + getEmployeeOfficeList().forEach(e -> { + list.add(e.getOfficeCode()); + parentCodess.add(e.getParentCodes() + e.getOfficeCode() + ","); + }); + // 查找并添加子机构 + getOfficeAllList().forEach(e -> { + for (String parentCodes : parentCodess) { + if (e.getParentCodes().startsWith(parentCodes)) { + list.add(e.getOfficeCode()); + break; + } + } + }); + return list.toArray(new String[list.size()]); + } + /** * 根据机构类型,获取当前员工所有机构编码,包括附属机构(数据权限用) * @author ThinkGem @@ -265,6 +294,28 @@ public class EmpUtils { return companyList; } + /** + * 获取当前员工所有公司编码,包括子公司(数据权限用) + * @author ThinkGem + */ + public static String[] getCompanyCodesAndChildren(){ + Set list = SetUtils.newLinkedHashSet(); + Set parentCodess = SetUtils.newHashSet(); + Company currentCompany = getCompany(); + list.add(currentCompany.getCompanyCode()); + parentCodess.add(currentCompany.getParentCodes() + currentCompany.getCompanyCode() + ","); + // 查找并添加子公司 + getCompanyAllList().forEach(e -> { + for (String parentCodes : parentCodess) { + if (e.getParentCodes().startsWith(parentCodes)) { + list.add(e.getCompanyCode()); + break; + } + } + }); + return list.toArray(new String[list.size()]); + } + /** * 清除指定用户缓存,不包括改用的SESSION缓存 * @author ThinkGem diff --git a/modules/core/src/main/resources/config/jeesite-core.yml b/modules/core/src/main/resources/config/jeesite-core.yml index 3ad7a882..7b921c59 100644 --- a/modules/core/src/main/resources/config/jeesite-core.yml +++ b/modules/core/src/main/resources/config/jeesite-core.yml @@ -167,6 +167,12 @@ user: remarks: "" }] + # 数据权限调试模式(会输出一些日志) + dataScopeDebug: false + + # 数据权限使用 API 方式实现(适应 Cloud 环境,基础用户表与业务数据表跨库的情况) + dataScopeApiMode: false + # 管理功能的控制权限类型(1拥有的权限 2管理的权限)(v4.1.5+) adminCtrlPermi: 2 @@ -188,9 +194,9 @@ role: #控制数据的类名: "指定一个静态类名,方便 ctrlDataAttrName 得到权限数据,如:当前机构编码、当前公司编码、当前行业编码等", ctrlDataClass: "com.jeesite.modules.sys.utils.EmpUtils", #控制数据的类名下的属性名 : "可看做 ctrlDataClass 下的 get 方法,如:EmpUtils.getOfficeCodes(),支持返回字符串或字符串数组类型", - ctrlDataAttrName: "officeCodes", + ctrlDataAttrName: "officeCodesAndChildren", #控制数据的所有上级编码 : "用于控制数据为树表的情况,为数组时,必须与 ctrlDataAttrName 返回的长度相同,不是树表设置为空", - ctrlDataParentCodesAttrName: "officeParentCodess" + ctrlDataParentCodesAttrName: "" }, Company: { ctrlTypeClass: "NONE"