update 数据权限注解支持类标注

This commit is contained in:
疯狂的狮子li 2021-12-16 10:54:44 +08:00
parent c2e28b5d94
commit e6b45d4cdb
3 changed files with 16 additions and 30 deletions

View File

@ -7,7 +7,7 @@ import java.lang.annotation.*;
* *
* @author Lion Li * @author Lion Li
*/ */
@Target(ElementType.METHOD) @Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME) @Retention(RetentionPolicy.RUNTIME)
@Documented @Documented
public @interface DataPermission { public @interface DataPermission {

View File

@ -1,16 +1,9 @@
package com.ruoyi.demo.mapper; package com.ruoyi.demo.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.ruoyi.common.annotation.DataColumn; import com.ruoyi.common.annotation.DataColumn;
import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.annotation.DataPermission;
import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus; import com.ruoyi.common.core.mybatisplus.core.BaseMapperPlus;
import com.ruoyi.demo.domain.TestTree; import com.ruoyi.demo.domain.TestTree;
import org.apache.ibatis.annotations.Param;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/** /**
* 测试树表Mapper接口 * 测试树表Mapper接口
@ -18,26 +11,10 @@ import java.util.List;
* @author Lion Li * @author Lion Li
* @date 2021-07-26 * @date 2021-07-26
*/ */
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
public interface TestTreeMapper extends BaseMapperPlus<TestTree> { public interface TestTreeMapper extends BaseMapperPlus<TestTree> {
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
List<TestTree> selectList(@Param(Constants.WRAPPER) Wrapper<TestTree> queryWrapper);
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
int updateById(@Param(Constants.ENTITY) TestTree entity);
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
} }

View File

@ -17,6 +17,7 @@ import com.ruoyi.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.Parenthesis;
import net.sf.jsqlparser.expression.operators.conditional.AndExpression; import net.sf.jsqlparser.expression.operators.conditional.AndExpression;
import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import org.springframework.context.expression.BeanFactoryResolver; import org.springframework.context.expression.BeanFactoryResolver;
@ -60,10 +61,12 @@ public class PlusDataPermissionHandler {
} }
try { try {
Expression expression = CCJSqlParserUtil.parseExpression(dataFilterSql); Expression expression = CCJSqlParserUtil.parseExpression(dataFilterSql);
// 数据权限使用单独的括号 防止与其他条件冲突
Parenthesis parenthesis = new Parenthesis(expression);
if (ObjectUtil.isNotNull(where)) { if (ObjectUtil.isNotNull(where)) {
return new AndExpression(where, expression); return new AndExpression(where, parenthesis);
} else { } else {
return expression; return parenthesis;
} }
} catch (JSQLParserException e) { } catch (JSQLParserException e) {
throw new ServiceException("数据权限解析异常 => " + e.getMessage()); throw new ServiceException("数据权限解析异常 => " + e.getMessage());
@ -126,12 +129,18 @@ public class PlusDataPermissionHandler {
List<Method> methods = Arrays.stream(ClassUtil.getDeclaredMethods(clazz)) List<Method> methods = Arrays.stream(ClassUtil.getDeclaredMethods(clazz))
.filter(method -> method.getName().equals(methodName)).collect(Collectors.toList()); .filter(method -> method.getName().equals(methodName)).collect(Collectors.toList());
DataPermission dataPermission; DataPermission dataPermission;
// 获取方法注解
for (Method method : methods) { for (Method method : methods) {
if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) { if (AnnotationUtil.hasAnnotation(method, DataPermission.class)) {
dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class); dataPermission = AnnotationUtil.getAnnotation(method, DataPermission.class);
return dataPermission.value(); return dataPermission.value();
} }
} }
// 获取类注解
if (AnnotationUtil.hasAnnotation(clazz, DataPermission.class)) {
dataPermission = AnnotationUtil.getAnnotation(clazz, DataPermission.class);
return dataPermission.value();
}
return null; return null;
} }
} }