行级数据权限实战:Pig微服务架构下的RBAC精细化控制
【免费下载链接】pig 项目地址: https://gitcode.com/gh_mirrors/pig/pig
还在为数据权限管理头痛吗?多租户系统如何实现不同用户看到不同的数据?Pig微服务框架提供了完整的RBAC(Role-Based Access Control,基于角色的访问控制)数据权限解决方案,让你轻松实现行级数据过滤。
什么是行级数据权限?
行级数据权限是指根据用户角色和权限,在数据库查询时自动过滤数据行。比如:
- 部门经理只能看到本部门数据
- 区域销售只能看到负责区域的数据
- 普通用户只能查看自己的数据
Pig的数据权限架构
Pig通过pig-common-mybatis模块实现了统一的数据权限拦截器:
// 数据权限核心拦截器
@Component
@Intercepts({@Signature(type = Executor.class, method = "query",
args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})})
public class DataPermissionInterceptor implements Interceptor {
// 自动解析权限注解并注入SQL条件
}
核心实现机制
1. 权限注解声明
在Service层使用@DataPermission注解声明数据权限:
@DataPermission(deptAlias = "d", userAlias = "u")
public IPage<SysUser> getUsersWithRolePage(Page page, UserDTO userDTO) {
return baseMapper.getUsersVosPage(page, userDTO);
}
2. MyBatis拦截器
pig-common-mybatis插件自动解析SQL,注入权限条件:
-- 原始SQL
SELECT * FROM sys_user WHERE status = 1
-- 注入后SQL
SELECT * FROM sys_user WHERE status = 1
AND dept_id IN (用户有权限的部门列表)
3. 权限规则配置
在application.yml中配置数据权限规则:
pig:
upms:
data-permission:
enabled: true
rules:
- name: 部门数据权限
condition: dept_id IN (:userDepts)
- name: 用户数据权限
condition: create_by = :userId
四种数据权限范围
| 权限级别 | 说明 | SQL条件示例 |
|---|---|---|
| 全部数据 | 查看所有数据 | 无限制 |
| 本部门数据 | 只能查看本部门数据 | dept_id = :userDept |
| 本部门及以下 | 查看本部门及子部门 | dept_id IN (:userDeptTree) |
| 仅本人数据 | 只能查看自己创建的数据 | create_by = :userId |
实战应用场景
用户管理数据隔离
SysUserServiceImpl中实现用户数据权限:
// 根据数据权限查询用户
@Override
@DataPermission(deptAlias = "d")
public List<UserExcelVO> listUser(UserDTO userDTO) {
return baseMapper.selectUserList(userDTO);
}
部门数据权限
SysDeptMapper中配置部门数据过滤:
<select id="selectDeptList" resultType="SysDept">
SELECT * FROM sys_dept
WHERE del_flag = '0'
<if test="dataScope != null">
AND dept_id IN (#{dataScope})
</if>
</select>
配置要点
- 启用数据权限:在配置文件中设置
pig.upms.data-permission.enabled=true - 注解配置:在Service方法上使用
@DataPermission注解 - 别名设置:通过deptAlias/userAlias指定表别名
- SQL映射:在Mapper XML中预留数据权限条件
总结
Pig框架的数据权限解决方案具有以下优势:
- 🚀 无侵入式:通过注解和拦截器实现,不修改业务代码
- 🔒 安全性强:在SQL层面过滤,防止越权访问
- ⚡ 性能优异:数据库层面过滤,减少网络传输
- 🛠️ 灵活配置:支持多种权限粒度和规则组合
通过Pig的RBAC数据权限体系,你可以轻松构建安全可靠的多租户系统,实现精细化的数据访问控制。
点赞收藏关注,获取更多微服务实战技巧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



