Pear Admin Pro 1.1.1 发布,零侵入式多租户,数据规则权限

项目简介:

1.基于 Spring 实现的通用权限管理平台(RBAC模式)。整合最新技术高效快速开发,前后端分离模式,开箱即用。

2.核心模块包括:用户、角色、职位、组织机构、菜单、字典、日志、多应用管理、文件管理、定时任务等功能。

3.代码量少、学习简单、功能强大、轻量级、易扩展,轻松开发从现在开始!

项目地址:前往

更新内容:

[新增] @DataScope 注解 rules 属性,支持 数据权限 规则配置模式

[新增]  Parameter validation 参数验证

[新增]  Tenant 拦截器,基于 tenant_id 的逻辑数据隔离

[新增]  TenantConstant 静态配置

[新增]  ExcelUtil 读写 Excel 方法,增加

[修复]  DataScopeInterceptor 拦截 Auto 模式,分页失败

[优化]  抽象 Invocation 的相关操作到 InvocationHandler 

本次更新,主要解决 数据权限 使用的不足,推出的规则模式,高度自定义的数据过滤方式

应用场景:

例如,存在订单列表 与 消息列表,有 两个 角色 admin (管理员) 与 user (用户),管理员 对 订单列表 的查询范围 为 全部, 对消息列表 的查询范围 为自己,用户 对 订单列表 的查询范围为 仅自己,对 消息列表 的查询范围同样为 仅自己

简单归纳:不同服务 在 不同角色 访问时 给予不同 的 可见范围

在之前的版本中,此业务只能通过 自定义 mapper 的方式去实现业务,本次更新 解决了 自定义 mapper 繁琐,使用 @DataScopeRule 注解开发该类业务

核心支持:

@DataScope 权限注解

@DataScopeRule 规则注解

简单示例:

声明 mapper 实现,查询所有订单

<select id="selectOrder" resultType="SysOrder">  select * from sys_order</select>

定义 mapper 接口,查询所有订单

public List<SysOrder> selectOrder();

可以看到以上代码,为查询所有订单,并未加入过滤条件

如果我们想要,实现 admin (管理员) 查询所有订单,user (用户) 查询自己的订单,应该怎么做呢?

修改 mapper 接口如下:

@DataScope(  rules = {    @DataScopeRule(role="admin", scope=Scope.ALL),    @DataScopeRule(role="user", scope=Scope.SELF)  })public List<SysOrder> selectOrder();

详解:

@DataScope 注解标注的接口,会被 Interceptor 拦截,进行相应的权限处理

@DataScope 中的 rules 属性,权限规则,即 规定 角色 对应 的查询范围

@DataScopeRule 为 规则 的载体,用于配置 角色 与 权限的映射,role 属性为 角色 的 code 标识,scope 为 数据权限的枚举

修改后的 mapper 可以翻译为 :

管理员 查询时,返回所有订单信息,用户 查询时,返回自己发起的订单

解析 :

原 SQL 语句

select * from sys_order

管理员访问时,执行的 SQL 语句

select * from sys_order

用户访问时,执行的 SQL 语句

select * from (select * from sys_order) data a where a.create_by = 1

核心实现:DataScopeInterceptor

回顾:

指定模式:@DataScope 的 scope 属性,用于指定所有访问都采用该 查询范围

快速上手:

@DataScope(scope = Scope.DEPT)public List<SysMessage> selectMessage()

解析:所有访问者,都返回自己所在部门的订单信息

自动模式:scope 配置为 Scope.AUTO 时 , 所有访问的用户,采用该用户拥有的角色所配置的权限范围过滤,当存在多个时,重叠查询范围

快速上手:

@DataScope(scope = Scope.AUTO)public List<SysMessage> selectMessage()

解析:根据访问者,所拥有的角色对应的数据权限,返回相应范围的消息,当存在多个 角色 时,重叠返回

本次除 数据权限 的增强外,还提拱了对多租户的支持

多租户是指软件架构支持一个实例服务多个组织(Customer),每一个用户被称之为租户 (tenant),租户之间的数据是隔离的,并且保证每个用户的数据对其他租户不可见

由于共享开发和维护成本,对某些用户来说,多租户也是一种经济的解决方案。

在 Pro 中,我们是如何提供做租户的技术支持

开始使用:

TenantConstant 静态配置​​​​​​​

 /**  * 开启多租户  * */  public static boolean enable = true;  /**   * 租户字段   * */  public static String TENANT_COLUMN = "tenant_id";  /**   * 忽略内容   * */  public static String IGNORE_TABLE[] = {}

1. enable : 启用多租户

修改 enable 为 true 后,项目全局启用多租户模式,所有的 Select Insert 

Update 操作,将 扩展 对 tenant_id 的字段的关联

举例:

Enable 为 false 时:​​​​​​​

select * from sys_user su
insert into sys_user (name,age) values("admin",18)
update sys_user set name="admin" where name = "root"

Enable 为 true 时:​​​​​​​

select * from sys_user su where su.tenant_id = 1
insert into sys_user (name,age,tenant_id) values("admin",18,1)
update sys_user set name="admin" where name = "root" and tenant_id=1

众所周知,在项目开发中,我们存在 sys_config,sys_tenant 等公共表,是不需要多租户过滤的,我们提供了 IGNORE_TABLE 配置​​​​​​​

public static String IGNORE_TABLE[] = {       "sys_config", "sys_tenant",};

在更复杂的业务中,如 Sys_user 表,需要全局开启多租户的数据隔离,但其中的某一个服务需要查询所有租户的数据,使用 @IgnoreTenant 注解,忽略该接口被多租户处理器处理​​​​​​​

@IgnoreTenantList<SysUser> selectAll();
优秀的个人博客,低调大师

微信关注我们

原文链接:https://www.oschina.net/news/154415

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。