68 lines
2.7 KiB
Java
68 lines
2.7 KiB
Java
package com.zhgd.magic;
|
|
|
|
import com.zhgd.xmgl.security.SecurityUser;
|
|
import com.zhgd.xmgl.modules.basicdata.service.IProjectService;
|
|
import com.zhgd.xmgl.security.SecurityUtil;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.stereotype.Component;
|
|
import org.ssssssss.magicapi.core.context.RequestEntity;
|
|
import org.ssssssss.magicapi.modules.db.BoundSql;
|
|
import org.ssssssss.magicapi.modules.db.inteceptor.SQLInterceptor;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Component
|
|
public class MagicInterceptor implements SQLInterceptor {
|
|
|
|
@Lazy
|
|
@Autowired
|
|
private IProjectService projectService;
|
|
|
|
@Override
|
|
public void preHandle(BoundSql boundSql, RequestEntity requestEntity) {
|
|
dataScopeFilterByProject(boundSql);
|
|
System.out.println("要执行的SQL:" + boundSql.getSql());
|
|
System.out.println("要执行的SQL参数:" + Arrays.toString(boundSql.getParameters()));
|
|
// 这里也可以通过boundSql的方法改写SQL和参数
|
|
}
|
|
|
|
private void dataScopeFilterByProject(BoundSql boundSql) {
|
|
SecurityUser user = SecurityUtil.getUser();
|
|
String sql = boundSql.getSql();
|
|
if (user.getAccountType() == 2) {
|
|
if (sql.contains("#gov")) {
|
|
if (sql.contains("#govalias")) {
|
|
sql = sql.replace("#govalias", "a.government_sn = '" + user.getSn() + "'");
|
|
} else {
|
|
sql = sql.replace("#gov", "government_sn = '" + user.getSn() + "'");
|
|
}
|
|
}
|
|
if (sql.contains("#project")) {
|
|
List<String> projectSns = projectService.getSnListForGov(user.getSn());
|
|
if (projectSns.size() == 0) {
|
|
projectSns.add("0");
|
|
}
|
|
String projectSn = projectSns.stream().collect(Collectors.joining("','"));
|
|
if (sql.contains("#projectalias")) {
|
|
sql = sql.replace("#projectalias", "a.project_sn in ('"+ projectSn +"')");
|
|
} else {
|
|
sql = sql.replace("#project", "project_sn in ('" + projectSn + "')");
|
|
}
|
|
}
|
|
} else if (user.getAccountType() == 4){
|
|
if (sql.contains("#project")) {
|
|
if (sql.contains("#projectalias")) {
|
|
sql = sql.replace("#projectalias", "a.project_sn = ('"+ user.getSn() +"')");
|
|
} else {
|
|
sql = sql.replace("#project", "project_sn = ('" + user.getSn() + "')");
|
|
}
|
|
}
|
|
}
|
|
boundSql.setSql(sql);
|
|
System.out.println(boundSql);
|
|
}
|
|
}
|