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<Long> 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<Long> 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<Long> 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();
|
}
|
|
}
|