若依框架中@DataScope数据权限注解的使用与自定义sql语句。 | 您所在的位置:网站首页 › 自定义数据表示什么意思 › 若依框架中@DataScope数据权限注解的使用与自定义sql语句。 |
介绍
若依框架本身具有角色、部门、用户业务。 在业务中,用户必须绑定一个角色,而角色又必须将自身绑定到部门,角色绑定了哪些部门,就决定着隶属于该角色的用户能对哪些部门数据进行增删改。 那么,怎么实现让用户只能遵循其绑定角色所指定的部门,来进行数据范围控制呢? 一般情况下,假如我们对一张表要进行查询或更新的话,需要在sql语句中,where条件语法后面 加上 dept.id = {currentDeptId} 来进行过滤, 例如下面的sql语句: select * from sys_user where dept_id = {currentUserDeptId}但是,在若依框架中,我们只需要在Service层的方法上加入@DataScope注解, 并分别通过deptAlias和userAlias属性,指定出部门表和用户表在sql语句中的别名是什么的话, 就不需要我们手动在sql语句后面加上过滤条件了。 。 使用下面,我们通过演示,来介绍如何使用@DataScope注解。 1.首先,我们有一个部门表的实体类,叫SysDept。并且,它还必须继承了BaseEntity这个类。 而BaseEntity实体类中,有一个类型为map,名称为params的属性。 @DataScope注解。现在搞懂了吧。 若依框架会根据访问该方法的前端用户所绑定的角色,自动生成相应的sql语句给BaseEntity类的params属性,进而在mapper.xml中引用它,来实现数据权限范围的控制。 改造DataScope生成的sql语句(原理)那么,既然使用了@DataScope后,就会根据前端用户的相关权限参数,自动来生成sql语句用以过滤。 那就很好奇了, 1,这个sql语句是在哪儿生成的? 2,前端用户的权限,肯定也是需要通过响应的判断,来生成的吧,那么在哪儿判断的? 3,假如它当前自动生成的sql语句,不符合我的现在业务的需求,我怎么去该? 4,它是如何实现的? 其实这是若依框架通过一个叫做‘DataScopeAspect'的切面类来实现的。 参考:https://blog.csdn.net/weixin_38657051/article/details/90018814 |
CopyRight 2018-2019 实验室设备网 版权所有 |