数据权限方案设计(后端)

本文介绍了当前项目的后端架构特点,使用贫血模型和Mybatis-Plus框架,探讨了数据权限模块如何遵循数据库驱动原则,通过拦截器和ThreadLocal处理行权限和列权限,以及如何通过包装类和TypeHandler实现字段权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 背景描述

    我们目前的后端代码架构,看样子有点像是贫血模型DDD的风格,简单来说,就是

  • 在Service业务层的方法中,多属性的模型里,入参命名为xxxDTO,返回命名为xxxVO;
  • 在Controller接口层就是用泛型多包装了一下,入参时ApiRequest,返回时ApiResponse ,
  • 在Repository持久层,我司采用的是增强mybatis的框架,Mybatis-Plus,所有的数据库返回模型类,都放在包名po下,类名一般不加PO后缀。
  • 有些BO模型放在bo包下用来装一些SQL语句查询返回,用于在Service层中进行处理业务逻辑,不会出现在Controller接口层的包装中。
  • 在持久层的基础组件中,我司业务种用的是Mysql5.7版本。
  • 在前后端开发使用的是分离技术,即前端使用流行的VUE+Element-UI ,后端提供json数据格式的http接口。

        在贫血模型的大部分情况下,各层的各种O基本都是只有属性,也可以叫字段 的get,set;而且很多时候,各层的O直接的属性和字段差异都不大,所以为了解决各种O之间的数据传递问题,我发现core项目代码中大部分是一半是用hutool提供的BeanUtil中的copyProperties方法,另一大半的是用的是bop脚手架封装的BeanUtils的convert或者copyProperties;至于 common-lang3提供的或者Spring提供的 BeanUtils几乎没有!

设计思路

        在数据权限模块下,我们坚持的原则是数据库驱动原理去做的,也就是数据库有的字段,我们才能做处理。我们基本只关心分页,列表,详情,修改这4种接口,(分页,列表,详情)对应select语句,(修改)对应update语句。用图来描述如下一次HTTP请求中的流程:

        如上图,对于【行权限】的处理原理,就是将配置的条件,转化成SQL语句种where/join后面的条件,拦截SQL语句并改写,从而达到行权限过滤数据行的目的!在针对【列权限】的处理,最开始的想法是将值进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值