参考这个框架:自定义注解 | Zjmzxfzhl (gitee.io)
一.组织结构的形式过滤数据
大概写一下里面的逻辑,关键的代码
1.默认的实现
OrgDataPermissionProvider
2. OrgDataPermissionProvider中的三种类型
public PermissionWrapper wrap(PermissionWrapper permissionWrapper) {
SecurityUser securityUser = (SecurityUser)SecurityUtils.getUserDetails();
CommonUtil.isEmptyMapWithKey(securityUser.getAdditionalInformation(), "orgLevelCode", "orgLevelCode is null");
String orgId = securityUser.getOrgId();
String orgLevelCode = securityUser.getAdditionalInformation().get("orgLevelCode").toString();
String alias = (String)CommonUtil.isEmptyDefault(this.alias, "o");
SqlFilter.sqlInject(alias);
String type = (String)CommonUtil.isEmptyDefault(this.type, "1");
if ("1".equals(type)) {
permissionWrapper.likeRight(alias, "ORG_LEVEL_CODE", orgLevelCode);
} else if ("2".equals(type)) {
permissionWrapper.eq(alias, "ORG_ID", orgId);
} else if ("3".equals(type)) {
((PermissionWrapper)permissionWrapper.likeRight(alias, "ORG_LEVEL_CODE", orgLevelCode)).ne(alias, "ORG_ID", orgId);
}
return permissionWrapper;
}
2.1 permissionWrapper.likeRight(alias, “ORG_LEVEL_CODE”, orgLevelCode);
可以查询本部门以及下属部门的数据
2.2 permissionWrapper.eq(alias, “ORG_ID”, orgId);
可以查询本部门的数据
2.3((PermissionWrapper)permissionWrapper.likeRight(alias, “ORG_LEVEL_CODE”, orgLevelCode)).ne(alias, “ORG_ID”, orgId);
可以查询下属部门的数据,但是查不了本部门的数据
以上三种感觉以及可以覆盖基本的使用场景了,是以组织结构的形式来过滤数据的。
二.动态条件的形式过滤数据

1.指定方法、对象、表字段,条件
2.最终结果就是,某个controller方法,在xx对象(角色或者用户)下,这个方法的sql中对table按照字段xxx的录入条件进行过滤。以上例子,对于角色queryRole的用户调用方法,就会限制
AND (a.FILTER_OPERATOR_NE <> '1')
具体的代码可以参考
com.zjmzxfzhl.common.core.config.mybatis.permission.PermissionParser
我看了下以上代码,对于查询条件好像是不支持sql语句的,只能是常量。这块也可以按照自己的需求来扩展。
以上两种形式是可以一起生效的。