package org.sxkj.resource.builder; import org.springblade.core.tool.utils.StringUtil; import org.springframework.stereotype.Component; import org.sxkj.system.cache.SysCache; import org.sxkj.system.cache.UserCache; import org.sxkj.system.entity.Dept; import org.sxkj.system.entity.User; import java.util.List; /** * @Description 权限查询构建器 * @Author AIX * @Date 2025/9/20 11:28 * @Version 1.0 */ @Component public class DevicePermissionBuilder { /** * 构建设备查询的权限条件 */ public String buildDevicePermissionCondition(Long userId, String tableAlias) { if (userId == null) { return "1 = 0"; // 无用户ID,无权限 } User user = UserCache.getUser(userId); if (user == null || user.getDeptId() == null) { return "1 = 0"; // 用户不存在或无部门,无权限 } Dept userDept = SysCache.getDept(Long.valueOf(user.getDeptId())); if (userDept == null) { return "1 = 0"; // 部门不存在,无权限 } StringBuilder condition = new StringBuilder(); String alias = tableAlias != null ? tableAlias + "." : ""; // 规则1:本部门设备,同部门设备 List deptIds = SysCache.getDeptParentIds(userDept.getId()); // condition.append(alias).append("domain = 3"); // condition.append(" and ").append(alias).append("is_deleted = 0"); // condition.append(" and ").append(alias).append("dept_id in ("); // for (int i = 0; i < deptIds.size(); i++) { // if (i == deptIds.size() - 1) { // condition.append(deptIds.get(i)); // continue; // } // condition.append(deptIds.get(i)).append(","); // } // condition.append(")"); // 规则2:借调设备,同部门设备 condition.append(alias).append("device_sn in (") .append("SELECT device_sn FROM manage_device_per_share ms ") .append("WHERE ms.device_sn = ").append(alias).append("device_sn ") .append("AND ms.loan_to_dept_id in ("); for (int i = 0; i < deptIds.size(); i++) { if (i == deptIds.size() - 1) { condition.append(deptIds.get(i)); continue; } condition.append(deptIds.get(i)).append(","); } condition.append(")) ").append(" and ").append(alias).append("hidden_flag = 0 "); // 规则3:统一部署机构的行政区划可见性 // if (userDept.getDeploymentMode() == 0 && user.getAreaCode() != null) { // condition.append(" OR (") // .append(alias).append("area_code LIKE '").append(HeaderUtils.formatAreaCode(user.getAreaCode())).append("%'") // // 统一部署 // .append(" and ").append(alias).append("deployment_mode = 0") // .append(")"); // } return condition.toString(); } public String buildDevicePermissionCondition(Long userId, String tableAlias, String sqlStr) { if (userId == null) { return "1 = 0"; // 无用户ID,无权限 } User user = UserCache.getUser(userId); if (user == null || user.getDeptId() == null) { return "1 = 0"; // 用户不存在或无部门,无权限 } Dept userDept = SysCache.getDept(Long.valueOf(user.getDeptId())); if (userDept == null) { return "1 = 0"; // 部门不存在,无权限 } StringBuilder condition = new StringBuilder(); String alias = tableAlias != null ? tableAlias + "." : ""; //部门祖父集合 List deptIds = SysCache.getDeptParentIds(userDept.getId()); // 借调设备,同部门设备 condition.append(alias).append("device_sn in (") .append("SELECT device_sn FROM manage_device_per_share ms ") .append("WHERE ms.device_sn = ").append(alias).append("device_sn ") .append("AND ms.loan_to_dept_id in ("); for (int i = 0; i < deptIds.size(); i++) { if (i == deptIds.size() - 1) { condition.append(deptIds.get(i)); continue; } condition.append(deptIds.get(i)).append(","); } condition.append(")) ").append(" and ").append(alias).append("hidden_flag = 0 "); condition.append(" " + sqlStr); return condition.toString(); } /** * 构建数据查询的权限条件 */ public String buildDataPermissionCondition(Long userId, String tableAlias) { if (userId == null) { return "1 = 0"; // 无用户ID,无权限 } User user = UserCache.getUser(userId); if (user == null || user.getDeptId() == null) { return "1 = 0"; // 用户不存在或无部门,无权限 } Dept userDept = SysCache.getDept(Long.valueOf(user.getDeptId())); if (userDept == null) { return "1 = 0"; // 部门不存在,无权限 } StringBuilder condition = new StringBuilder(); String alias = StringUtil.isNotBlank(tableAlias)? tableAlias + "." : ""; // 根据部门部署模式查询,单独查询只查看本部门数据 // List deptIds = SysCache.getDeptChildIds(userDept.getId()); condition.append(alias).append("create_dept in ("); condition.append("SELECT id FROM blade_dept ") .append("WHERE id = ").append(alias).append("create_dept ") .append("AND deployment_mode = ").append(userDept.getDeploymentMode()); condition.append(")"); return condition.toString(); } }