Index: forgon-core/src/main/java/com/forgon/directory/service/DirectoryHelper.java =================================================================== diff -u -r12331 -r15958 --- forgon-core/src/main/java/com/forgon/directory/service/DirectoryHelper.java (.../DirectoryHelper.java) (revision 12331) +++ forgon-core/src/main/java/com/forgon/directory/service/DirectoryHelper.java (.../DirectoryHelper.java) (revision 15958) @@ -1081,21 +1081,37 @@ return orgUnitSet2CodesString(allOrgUnit); } - // 查找用户所在部门,以及这些部门的下级部门 + /** + * 查找用户所在部门,以及这些部门的下级部门 + * 注意:如果用户直接属于公司的根节点,会忽略该节点,不会找出该节点下的子部门。最初的实现代码中, + * 如果用户直接属于公司的根节点,则会把该公司下的所有部门找出来,如果部门多,会严重影响性能。 + * + * @param user + * @return + */ public String findOrgUnitCodesByUserIncludingChildren(User user) { Set allOrgUnit = new HashSet(); Set orgUnitRelationList = user.getOrgUserRelations(); if (orgUnitRelationList != null && orgUnitRelationList.size() > 0) { for (OrgUserRelation relation : orgUnitRelationList) { - allOrgUnit.addAll(orgUnitManager - .getCurrentOrgUintChildren(relation.getOrgUnit() - .getId())); + OrgUnit orgUnit = relation.getOrgUnit(); + // 如果用户所属的组织单位为部门,才去查找子组织单位。是公司就不会查找子组织单位 + if (OrgUnit.ORGUNIT_TYPE_DEPARTMENT == orgUnit.getOrgType()){ + allOrgUnit.addAll(orgUnitManager + .getCurrentOrgUintChildren(relation.getOrgUnit() + .getId())); + } } } return orgUnitSet2CodesString(allOrgUnit); } + /** + * 组织单位的集合对象转换为组织单位的代码字符串,多个代码之间用逗号分隔 + * @param orgUnits + * @return + */ public static String orgUnitSet2CodesString(Set orgUnits) { String orgUnitCodes = ""; Index: ssts-web/src/main/java/com/forgon/disinfectsystem/security/userdetails/DaoUserDetailSSTSImpl.java =================================================================== diff -u -r15897 -r15958 --- ssts-web/src/main/java/com/forgon/disinfectsystem/security/userdetails/DaoUserDetailSSTSImpl.java (.../DaoUserDetailSSTSImpl.java) (revision 15897) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/security/userdetails/DaoUserDetailSSTSImpl.java (.../DaoUserDetailSSTSImpl.java) (revision 15958) @@ -226,7 +226,7 @@ userVO .setDirectOrgUnitNamesWhereUserBelong(directOrgUnitNamesWhereUserBelong); - // 查找用户直属的组织单位,以及这些部门的下级部门 + // 查找用户直属的组织单位,以及这些部门的下级部门,不包含公司 String directOrgUnitCodesWhereUserBelongIncludingChildren = directoryHelper .findOrgUnitCodesByUserIncludingChildren(currentLoginedUser); userVO