若依项目中的数据权限管理详解

打印 上一主题 下一主题

主题 1061|帖子 1061|积分 3183

1,数据权限

在实际开发中,必要设置用户只能检察哪些部门的数据,这种情况一样平常称为数据权限。
比方对于贩卖,财务的数据,它们黑白常敏感的,因此要求对数据权限举行控制, 对于基于团体性的应用系统而言,就更多必要控制好各自公司的数据了。如设置只能看本公司、或者本部门的数据,对于特殊的领导,可能必要跨部门的数据, 因此步伐不能硬编码那个领导该访问哪些数据,必要举行配景的权限和数据权限的控制。
2,若依数据范围管理

默认系统管理员admin拥有全部数据权限(userId=1),默认角色拥有全部数据权限(如不必要数据权限不用设置数据权限操纵)

注解参数说明
参数类型默认值形貌deptAliasString空部门表的别名userAliasString空用户表的别名 3,数据权限利用

1、在(系统管理-角色管理)设置必要数据权限的角色 目前支持以下几种权限


  • 全部数据权限
  • 自定命据权限
  • 部门数据权限
  • 部门及以下数据权限
  • 仅本人数据权限
2、在必要数据权限控制方法上添加@DataScope注解,此中d和u用来表现表的别名
部门数据权限注解
  1. @DataScope(deptAlias = "d")
  2. public List<...> select(...)
  3. {
  4.     return mapper.select(...);
  5. }
复制代码
部门及用户权限注解
  1. @DataScope(deptAlias = "d", userAlias = "u")
  2. public List<...> select(...)
  3. {
  4.     return mapper.select(...);
  5. }
复制代码
3、在mybatis查询底部标签添加数据范围过滤
  1. <select id="select" parameterType="..." resultMap="...Result">
  2.     <include refid="select...Vo"/>
  3.     <!-- 数据范围过滤 -->
  4.     ${params.dataScope}
  5. </select>
复制代码
比方:用户管理(未过滤数据权限的情况):
  1. select u.user_id, u.dept_id, u.login_name, u.user_name, u.email
  2.         , u.phonenumber, u.password, u.sex, u.avatar, u.salt
  3.         , u.status, u.del_flag, u.login_ip, u.login_date, u.create_by
  4.         , u.create_time, u.remark, d.dept_name
  5. from sys_user u
  6.         left join sys_dept d on u.dept_id = d.dept_id
  7. where u.del_flag = '0'
复制代码
比方:用户管理(已过滤数据权限的情况):
  1. select u.user_id, u.dept_id, u.login_name, u.user_name, u.email
  2.         , u.phonenumber, u.password, u.sex, u.avatar, u.salt
  3.         , u.status, u.del_flag, u.login_ip, u.login_date, u.create_by
  4.         , u.create_time, u.remark, d.dept_name
  5. from sys_user u
  6.         left join sys_dept d on u.dept_id = d.dept_id
  7. where u.del_flag = '0'
  8.         and u.dept_id in (                select dept_id                from sys_role_dept                where role_id = 2        )
复制代码
结果很显着,我们多了如下语句。通过角色部门表(sys_role_dept)完成了数据权限过滤
  1. and u.dept_id in (
  2.         select dept_id
  3.         from sys_role_dept
  4.         where role_id = 2
  5. )
复制代码
逻辑实现代码 com.ruoyi.framework.aspectj.DataScopeAspect
详细的代码实实际在@DataScope中实现:

@DataScope界说在SysUserController当中

点击selectUserList(user)进入:

检察@DataScope的方法:

DataScope是若依自己界说的注解:

仅实体继承BaseEntity才会举行处理,SQL语句会存放到BaseEntity对象中的params属性中,然后在xml中通过${params.dataScope}获取拼接后的语句。
PS:假如是自己的业务表必要实现数据权限,必要有dept_id和user_id这两个字段。
4,利用效果

这里有一个总公司,深圳的业务前台

若依修改用户数据的权限可以在角色管理中举行修改

在角色管理中可以对权限举行修改 、角色管理中还涉及到分配用户。
利用不同权限用户名和密码可以登录不同角色,以深圳的SZ为例,登录之后只能够看到深圳总公司;只有市场部门权限的登录之后只能够看到市场部分;本部门数据权限只能看到本部门的,下面部门的数据看不到,本部门及以下数据权限可以看到部门以下的数据权限;仅本人的数据权限,只可以看到本人的,以user_only举行登录;以仅本人的数据权限举行登录,角色管理中可以看到分配用户;仅自己登录部门数据看不到,用户数据只能看到他自己的。



平庸的人用热闹填补空虚,优秀的人则用独处结果自己。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表