数据权限,实现指定用户可以操作指定范围的数据。例如说,针对员工信息的数据权限:
上述的这个示例,使用硬编码是可以实现的,并且也非常简单。但是,在业务快速迭代的过程中,类似这种数据需求会越来越多,如果全部采用硬编码的方式,无疑会给我们带来非常大的开发与维护成本。
因此,项目提供 yudao-spring-boot-starter-biz-data-permission (opens new window)技术组件,只需要少量的编码,无需入侵到业务代码,即可实现数据权限。
友情提示:数据权限是否支持指定用户只能查看数据的某些字段?不支持。权限可以分成三类:功能权限、数据权限、字段权限。字段权限的控制,不属于数据权限,而是属于字段权限,会在未来提供,敬请期待。
1. 实现原理
yudao-spring-boot-starter-biz-data-permission 技术组件的实现原理非常简单,每次对数据库操作时,他会自动拼接 WHERE data_column = ? 条件来进行数据的过滤。
例如说,查看员工信息的功能,对应 SQL 是 SELECT * FROM system_users,那么拼接后的 SQL 结果会是:
明白了实现原理之后,想要进一步加入理解,后续可以找时间 Debug 调试下 DataPermissionDatabaseInterceptor 类的这三个方法:
#processSelect(...) 方法:处理 SELECT 语句的 WHERE 条件。
#processUpdate(...) 方法:处理 UPDATE 语句的 WHERE 条件。
#processDelete(...) 方法:处理 DELETE 语句的 WHERE 条件。
#2. 基于部门