行级数据权限实战:Pig微服务架构下的RBAC精细化控制

行级数据权限实战:Pig微服务架构下的RBAC精细化控制

【免费下载链接】pig 【免费下载链接】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>

配置要点

  1. 启用数据权限:在配置文件中设置pig.upms.data-permission.enabled=true
  2. 注解配置:在Service方法上使用@DataPermission注解
  3. 别名设置:通过deptAlias/userAlias指定表别名
  4. SQL映射:在Mapper XML中预留数据权限条件

总结

Pig框架的数据权限解决方案具有以下优势:

  • 🚀 无侵入式:通过注解和拦截器实现,不修改业务代码
  • 🔒 安全性强:在SQL层面过滤,防止越权访问
  • 性能优异:数据库层面过滤,减少网络传输
  • 🛠️ 灵活配置:支持多种权限粒度和规则组合

通过Pig的RBAC数据权限体系,你可以轻松构建安全可靠的多租户系统,实现精细化的数据访问控制。

点赞收藏关注,获取更多微服务实战技巧!

【免费下载链接】pig 【免费下载链接】pig 项目地址: https://gitcode.com/gh_mirrors/pig/pig

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值