通用数据权限过滤工具
1. 通用数据权限实体类
配合IPermissionCommonService通用权限接口进行使用,目的是获取传入用户数据权限进行过滤数据
public class PermissionVO implements Serializable {
@ApiModelProperty("园区权限")
private Set<String> parks;
@ApiModelProperty("部门权限")
private Set<String> departments;
@ApiModelProperty("用户权限")
private Set<String> users;
}
2. 通用数据权限接口类
@Api("通用权限接口")
public interface IPermissionCommonService {
/**
* 获取指定用户所具备的数据权限集合
*
* @param user 进行权限过滤的用户
* @param suiteCode 套件标识
* @return 数据权限集合
*/
@ApiModelProperty("获取指定用户所具备的数据权限集合")
Map<String, Set<String>> getPermissions(User user, String suiteCode);
/**
* 获取指定用户所具备的数据权限集合
*
* @param user 进行权限过滤的用户
* @param suiteCode 套件标识
* @return 数据权限集合
*/
@ApiModelProperty("获取指定用户所具备的数据权限集合")
PermissionVO getPermission(User user, String suiteCode);
}
3. 通用数据权限组合工具类
public class QueryUtil {
/**
* 通用权限查询对象获取,根据权限集合设置数据查询权限,部门 or 园区 or 个人
*
* @param permissions 权限集合
* @param wrapper wrapper
*/
public static <T> void setPermission(Map<String, Set<String>> permissions,
QueryWrapper<T> wrapper) {
setPermission(permissions, wrapper, PARK_ID, DEPT_ID, CREATE_BY);
}
/**
* 通用权限查询对象获取,根据权限集合设置数据查询权限,部门 or 园区 or 个人
*
* @param permissions 权限集合
* @param wrapper 查询wrapper
* @param parkField 园区字段
* @param deptField 部门字段
* @param userField 用户字段
*/
public static <T> void setPermission(Map<String, Set<String>> permissions,
QueryWrapper<T> wrapper, String parkField, String deptField, String userField) {
wrapper.and(w -> {
if (permissions.containsKey(PARK)) {
w.or().in(parkField, permissions.get(PARK));
}
if (permissions.containsKey(DEPARTMENT)) {
w.or().in(deptField, permissions.get(DEPARTMENT));
}
if (permissions.containsKey(USER)) {
w.or().in(userField, permissions.get(USER));
}
});
return wrapper;
}
使用示例
开发者-指定套件-权限管理-配置数据权限
招商业务使用招商基础设置(cn.flyrise.business.base)套件中的配置,业务可自行决定是否遵从
- 开发沙箱配置相应人员、角色
代码示例
业务类使用
以传入user为例:
- 当user存在园区数据权限时,将获取园区所有数据:park_id in (?,?)
- 当user存在部门数据权限时,将获取部门所有数据:dept_id in (?,?)
- 以及获取个人添加数据:create_by in (?,?)
@Resource private IPermissionCommonService permissionCommonService; public Page<LeaseIntentionVO> page(User user, QueryVO vo) { QueryWrapper<LeaseIntentionPO> wrapper = getWrapper(vo); Map<String, Set<String>> permissions = permissionCommonService.getPermissions(user, BUSINESS_BASE); QueryUtil.setPermission(permissions, wrapper); wrapper.orderByDesc(ID); Page<LeaseIntentionPO> page = baseMapper .selectPage(new Page<>(vo.getPage(), vo.getSize()), wrapper); Page<LeaseIntentionVO> result = CastUtils.cast(page); result.setRecords(convertRecords(user, page.getRecords())); return result; }
文档更新时间: 2022-04-02 17:40 作者:陆鸿睿