Commit db1d5bae authored by tangwei's avatar tangwei

管理端权限注解

parent 08543b64
......@@ -29,8 +29,11 @@ public @interface UserEmpower {
/**
* @param 多个字段之间关系(or,and)
*/
String relationship() default "";
String[] relationship();
/**
* @param 是否特有(or,and)
*/
boolean specific() default true;
}
......@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.hygf.api.config;
import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
import com.yeejoin.amos.boot.module.hygf.api.entity.StdUserEmpower;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.select.PlainSelect;
......@@ -30,76 +31,83 @@ public class UserEmpowerInterceptor implements Interceptor {
@Override
public Object intercept(Invocation invocation) throws Throwable {
try {
StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
//获取方法注解
Method method = getTargetDataAuthMethod(mappedStatement);
UserEmpower userEmpower = getTargetDataAuthAnnotation(mappedStatement);
if(userEmpower==null){
return invocation.proceed();
}
//获取字段
String[] filed= userEmpower.field();
//获取字段条件表达式
String[] fileCondition= userEmpower.fieldConditions();
//获取 参数之间关系
String fileBetweenCondition= userEmpower.relationship();
//获取参数值,
List<String> orgCode = UserEmpowerThreadLocal.getDataAuthRule();
BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
//获取sql
String sql = boundSql.getSql();
//拼接参数
List<String> sq= selectSql(filed, fileCondition, orgCode);
String sqldata=" ";
if(sq!=null&&sq.size()>0){
if(fileCondition.length==1){
sqldata= sqldata+sq.get(0);
}else{
if(fileBetweenCondition!=null&&!fileBetweenCondition.isEmpty()){
for (int i = 0; i < sq.size(); i++) {
if(i==sq.size()-1){
sqldata= sqldata+sq.get(i);
StdUserEmpower orgCode = UserEmpowerThreadLocal.getDataAuthRule();
if(orgCode.isFlag()){
try {
StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
//获取方法注解
Method method = getTargetDataAuthMethod(mappedStatement);
UserEmpower userEmpower = getTargetDataAuthAnnotation(mappedStatement);
if(userEmpower==null){
return invocation.proceed();
}
//获取字段
String[] filed= userEmpower.field();
//获取字段条件表达式
String[] fileCondition= userEmpower.fieldConditions();
//获取 参数之间关系
String[] fileBetweenCondition= userEmpower.relationship();
//获取 是否特殊
Boolean specific= userEmpower.specific();
BoundSql boundSql = (BoundSql) metaObject.getValue("delegate.boundSql");
//获取sql
String sql = boundSql.getSql();
//拼接参数
List<String> sq= selectSql(filed, fileCondition, orgCode,specific);
String sqldata=" ";
if(sq!=null&&sq.size()>0){
if(fileCondition.length==1){
sqldata= sqldata+sq.get(0);
}else{
if(fileBetweenCondition!=null&&fileBetweenCondition.length>0){
for (int i = 0; i < sq.size(); i++) {
if(i==sq.size()-1){
sqldata= sqldata+sq.get(i);
}else{
sqldata= sqldata+sq.get(i)+" "+fileBetweenCondition[i]+" ";
}
}
}else{
sqldata= sqldata+sq.get(i)+" "+fileBetweenCondition+" ";
sqldata=" ";
}
}
}else{
sqldata=" ";
}
}
}
Select select = (Select) CCJSqlParserUtil.parse(sql);
PlainSelect selectBody = (PlainSelect) select.getSelectBody();
if (!ValidationUtil.isEmpty(sqldata.trim())) {
Select select = (Select) CCJSqlParserUtil.parse(sql);
PlainSelect selectBody = (PlainSelect) select.getSelectBody();
if (!ValidationUtil.isEmpty(sqldata.trim())) {
} else {
sqldata=" 1= 2 ";
}
} else {
sqldata=" 1= 2 ";
}
if (ValidationUtil.isEmpty(selectBody.getWhere())) {
selectBody.setWhere(CCJSqlParserUtil.parseCondExpression(sqldata));
} else {
AndExpression andExpr = new AndExpression(selectBody.getWhere(), CCJSqlParserUtil.parseCondExpression(sqldata));
selectBody.setWhere(andExpr);
}
System.out.println(selectBody.toString());
metaObject.setValue("delegate.boundSql.sql", selectBody.toString());
}catch (Exception e){
e.printStackTrace();
throw new BadRequest("权限认证失败!");
}finally {
UserEmpowerThreadLocal.clean();
if (ValidationUtil.isEmpty(selectBody.getWhere())) {
selectBody.setWhere(CCJSqlParserUtil.parseCondExpression(sqldata));
} else {
AndExpression andExpr = new AndExpression(selectBody.getWhere(), CCJSqlParserUtil.parseCondExpression(sqldata));
selectBody.setWhere(andExpr);
}
System.out.println(selectBody.toString());
metaObject.setValue("delegate.boundSql.sql", selectBody.toString());
}catch (Exception e){
e.printStackTrace();
throw new BadRequest("权限认证失败!");
}finally {
UserEmpowerThreadLocal.clean();
}
return invocation.proceed();
}else{
return invocation.proceed();
}
return invocation.proceed();
}
@Override
......@@ -116,19 +124,53 @@ public class UserEmpowerInterceptor implements Interceptor {
}
private List<String> selectSql(String[] filed,String[] fileCondition, List<String> data){
private List<String> selectSql(String[] filed,String[] fileCondition, StdUserEmpower stdUserEmpower,boolean specific){
List<String> sql=new ArrayList<>();
if(filed!=null&&filed.length>0&&fileCondition!=null&&fileCondition.length>0&&data!=null&&data.size()>0){
for (int i = 0; i < filed.length; i++) {
String sq=" ";
sq= getCondition(filed[i],fileCondition[i],data);
sql.add(sq);
if(specific){
List<String> data= stdUserEmpower.getAmosOrgCode();
List<String> notdata= stdUserEmpower.getEliminateAmosOrgCode();
if( filed!=null&&filed.length>0){
for (int i = 0; i < filed.length; i++) {
String sq=" ";
sq= getConditiontd(filed[i],fileCondition[i],data,notdata);
sql.add(sq);
}
}
}else{
List<String> data= stdUserEmpower.getAmosOrgCode();
if( filed!=null&&filed.length>0){
for (int i = 0; i < filed.length; i++) {
String sq=" ";
sq= getCondition(filed[i],fileCondition[i],data);
sql.add(sq);
}
}
}
return sql;
}
//特定管理端条件
private String getConditiontd(String filed,String type, List<String> data, List<String> notdata){
String sql=" ";
if(data!=null&&!data.isEmpty()){
if(data.contains("all")){
sql = sql+getnotInData( filed,notdata);
}else{
sql = sql+getInData( filed,data) + "and"+ getnotInData( filed,notdata);
}
}
return sql;
}
private String getCondition(String filed,String type, List<String> data){
String sql=" ";
switch (type) {
......@@ -141,8 +183,6 @@ public class UserEmpowerInterceptor implements Interceptor {
}else{
}
break;
case "likeLeft":
if(data.size()==1){
......@@ -182,6 +222,20 @@ public class UserEmpowerInterceptor implements Interceptor {
}
return filed+" in "+sql;
}
private String getnotInData( String filed,List<String> data){
String sql=" ( ";
for (int i = 0; i < data.size(); i++) {
if(i==data.size()-1){
sql=sql+"'" +data.get(i)+"' ) ";
}else{
sql=sql+"'"+ data.get(i)+"',";
}
}
return filed+" not in "+sql;
}
private String getData( String filed,List<String> data){
String sql="";
if(data.size()==1){
......
package com.yeejoin.amos.boot.module.hygf.api.config;
import com.yeejoin.amos.boot.module.hygf.api.entity.StdUserEmpower;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -19,11 +20,11 @@ public class UserEmpowerThreadLocal {
return requestContext.get();
}
public static List<String> getDataAuthRule() {
public static StdUserEmpower getDataAuthRule() {
return getPermissionInterceptorContext().getThreadLocalData();
}
public static void setDataAuthRule(List<String> dataAuthRule) {
public static void setDataAuthRule(StdUserEmpower dataAuthRule) {
getPermissionInterceptorContext().setDataAuthRule(dataAuthRule);
}
......
package com.yeejoin.amos.boot.module.hygf.api.config;
import com.yeejoin.amos.boot.module.hygf.api.entity.StdUserEmpower;
import java.io.Serializable;
import java.util.List;
......@@ -11,13 +13,13 @@ import java.util.List;
public class UserEmpowerThreadLocalModel implements Serializable {
private static final long serialVersionUID = 1L;
private List<String> threadLocalData;
private StdUserEmpower threadLocalData;
public List<String> getThreadLocalData() {
public StdUserEmpower getThreadLocalData() {
return threadLocalData;
}
public void setDataAuthRule(List<String> threadLocalData) {
public void setDataAuthRule(StdUserEmpower threadLocalData) {
this.threadLocalData = threadLocalData;
}
......
package com.yeejoin.amos.boot.module.hygf.api.config;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisKey;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.hygf.api.dto.UserUnitInformationDto;
import com.yeejoin.amos.boot.module.hygf.api.entity.StdUserEmpower;
import com.yeejoin.amos.boot.module.hygf.api.mapper.PersonnelBusinessMapper;
import com.yeejoin.amos.boot.module.hygf.api.mapper.UserEmpowerMapper;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.feign.privilege.model.CompanyModel;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
......@@ -13,6 +21,9 @@ import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.util.ArrayList;
import java.util.Collection;
/**
* @description:
* @author: tw
......@@ -26,7 +37,12 @@ public class UserLimitsAdvice {
@Autowired
private UserEmpowerMapper userEmpowerMapper;
@Autowired
PersonnelBusinessMapper personnelBusinessMapper;
@Autowired
private RedisUtils redisUtils;
private static final String ROLEFLAG="-经销商-";
//调用的方法有该注解才会拦截
@Pointcut("@annotation(com.yeejoin.amos.boot.module.hygf.api.config.UserLimits)")
......@@ -38,17 +54,25 @@ public class UserLimitsAdvice {
@Around("annotationPointCut()")
public Object annotationAround(ProceedingJoinPoint joinPoint) throws Throwable {
//获取方法
// Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
// 获取该方法上的 OpenApi注解
// UserLimits aspectAnnotation = method.getAnnotation(UserLimits.class);
String userid=RequestContext.getExeUserId();
LambdaQueryWrapper<StdUserEmpower> qu=new LambdaQueryWrapper();
qu.eq(StdUserEmpower::getAmosUserId,userid);
qu.ne(StdUserEmpower::getPermissionType,"YTH");
StdUserEmpower list= userEmpowerMapper.selectOne(qu);
UserEmpowerThreadLocal.setDataAuthRule(list!=null?list.getAmosOrgCode():null);
StdUserEmpower stdUserEmpower=new StdUserEmpower();
ReginParams reginParams= JSONObject.parseObject(redisUtils.get(RedisKey.buildReginKey(RequestContext.getExeUserId(), RequestContext.getToken())).toString(), ReginParams.class);
//判断是否经销商,经销商跟管理端互斥
String org= reginParams.getUserModel().getOrgNames();
if(org.contains(ROLEFLAG)){
UserUnitInformationDto userUnitInformationDto=personnelBusinessMapper.getUserUnitInformationDto(userid);
stdUserEmpower.setFlag(false);
stdUserEmpower.setDeveloperId(userUnitInformationDto.getAmosUnitInfoId());
stdUserEmpower.setRegionalCompaniesCode(userUnitInformationDto.getRegionalCompaniesCode());
stdUserEmpower.setUserId(userid);
}else{
LambdaQueryWrapper<StdUserEmpower> qu=new LambdaQueryWrapper();
qu.eq(StdUserEmpower::getAmosUserId,userid);
qu.eq(StdUserEmpower::getPermissionType,"HYGF");
stdUserEmpower= userEmpowerMapper.selectOne(qu);
stdUserEmpower.setFlag(true);
}
UserEmpowerThreadLocal.setDataAuthRule(stdUserEmpower!=null?stdUserEmpower:null);
//正常往后执行
return joinPoint.proceed();
}
......
......@@ -38,4 +38,9 @@ public class UserUnitInformationDto {
@ApiModelProperty(value = "经销商单位id")
private Long amosUnitInfoId;
@ApiModelProperty(value = "role")
private String role;
}
......@@ -38,5 +38,27 @@ public class StdUserEmpower extends BaseEntity {
@TableField("permission_type")
private String permissionType;
/**
* 单位orgcode
*/
@TableField(value = "eliminate_amos_org_code",typeHandler = FastjsonTypeHandler.class)
private List<String> eliminateAmosOrgCode;
//登录人id
@TableField(exist = false)
private String userId;
//区域公司orgcode
@TableField(exist = false)
private String regionalCompaniesCode;
//经销商业务单位id
@TableField(exist = false)
private Long developerId;
//管理端 true,还是经销商false
@TableField(exist = false)
private boolean flag;
}
......@@ -20,9 +20,9 @@ public interface JpCollectorMapper extends BaseMapper<JpCollector> {
List<Map<String,Object>> queryCollectorCountStatus(@Param("dto") JpStationDto reviewDto);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
// @UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
List<JpCollectorDto> selectPageData(@Param("dto") JpCollectorDto reviewDto, Integer current, Integer size);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
// @UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
int selectPageDataTota(@Param("dto") JpCollectorDto reviewDto);
}
......@@ -21,9 +21,9 @@ public interface JpInverterMapper extends BaseMapper<JpInverter> {
List<Map<String,Object>> queryInverterCountStatus(@Param("dto") JpStationDto reviewDto);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
//@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
List<JpInverterDtoNew> selectPageData(@Param("dto") JpInverterDto reviewDto, int current, int size);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
//@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
int selectPageDataTotal(@Param("dto") JpInverterDto reviewDto);
}
......@@ -24,36 +24,36 @@ public interface JpStationMapper extends BaseMapper<JpStation> {
List<Map<String,Object>> countState(@Param("dto") JpStationDto reviewDto);
List<Map<String,Double>> getPowerqx(String dateType);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
//@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
List<JpStation> getJpStation(@Param("dto") JpStationDto reviewDto);
List<JpStation> getJpStationList(@Param("dto") JpStationDto reviewDto);
@UserEmpower(field ={"ORG_CODE"} ,fieldConditions ={"in"} ,relationship="")
// @UserEmpower(field ={"ORG_CODE"} ,fieldConditions ={"in"} ,relationship="")
List<DropDown> getRegion();
@UserEmpower(field ={"hygf_regional_companies.regional_companies_code","hygf_unit_info.amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
//@UserEmpower(field ={"hygf_regional_companies.regional_companies_code","hygf_unit_info.amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
List<DropDown> getDealer(@Param("regionalCompaniesCode") String regionalCompaniesCode);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
//@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
JpStationDto getCountJpStationdata(@Param("dto") JpStationDto reviewDto);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
// @UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
List<Map<String,Object>> getcountState(@Param("dto") JpStationDto reviewDto);
//投产电站数
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
/// @UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
Map<String,Object>getcountStatetc(@Param("dto") JpStationDto reviewDto);
//建设建站数
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
// @UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
Map<String,Object>getcountStatejs(@Param("dto") JpStationDto reviewDto);
//接入中电站数
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
//@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
Map<String,Object>getcountStatejr(@Param("dto") JpStationDto reviewDto);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
// @UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
Map<String,Object> getcount( @Param("dto") JpStationDto reviewDto);
@UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
// @UserEmpower(field ={"regional_companies_code","amos_company_code"} ,fieldConditions ={"in","in"} ,relationship="and")
@UserLimits
List<JpStationDto> queryForDealerReviewPagenew(@Param("dto") JpStationDto reviewDto, Page<JpStationDto> pa);
......
......@@ -68,6 +68,7 @@ select ORG_CODE orgCode from privilege_company where privilege_company.SEQUEN
hygf_personnel_business.amos_dealer_id amosDealerId ,
privilege_company.COMPANY_NAME amosDealerName ,
privilege_company.ORG_CODE amosDealerOrgCode,
std_user_biz.role role,
(select sequence_nbr from hygf_unit_info h where h.amos_company_seq= hygf_personnel_business.amos_dealer_id )amosUnitInfoId
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment