SpringCloudGateway集成Rbac权限模型实现动态权限控制!

SpringCloudGateway集成Rbac权限模型实现动态权限控制!

实战! Spring Cloud Gateway集成Rbac权限模型,实现动态权限控制!

角色权限设计5张表_角色权限图_角色权限流程图

本文介绍网关层如何集成RBAC权限模型进行鉴权和鉴权。 文章目录如下:

角色权限设计5张表_角色权限流程图_角色权限图

什么是 RBAC 权限模型?

RBAC(Role-Based Access Control)基于角色访问控制,是目前应用最广泛的权限模型。

相信大家对于这个权限模型已经很熟悉了。 该模型具有三个用户、角色和权限。 传统的权限模型中,用户与角色层直接关联,将用户与权限解耦,使得权限体系更加清晰。 职责分离和更大的灵活性。

角色权限流程图_角色权限图_角色权限设计5张表

以上五个表的SQL就不详细贴出来了。 它们将被放置在案例源代码的doc目录中角色权限设计5张表程序开发,如下所示:

设计理念

RBAC权限模型是基于角色的,所以Spring Security中的权限就是角色。 具体认证授权流程如下:

用户登录应用令牌

通过UserDetailService查询并加载用户信息,如密码、权限(角色)...并封装到UserDetails中

Token申请成功角色权限设计5张表,您可以使用Token访问资源。

网关级别比较访问的URL(在Redis中)所需的权限是否与当前令牌的权限重叠。 如果有交集,则表示存在访问该URL的权限。

如果有权限就访问,否则拒绝

以上只是一个大概的流程,还有一些细节需要讨论,如下:

1、如何维护URL对应的权限?

这相对容易实现。 涉及到RBAC权限模型中的三张表,分别是权限表、角色表、权限角色对应表。 具体实施过程如下:

项目启动时,会将权限(URL)和角色的对应关系加载到Redis中。

管理界面涉及URL对应关系的变化必须实时更改到Redis。

例如权限中有这样一条数据,如下:

URL /order/info 是一个权限,管理员可以将其分配给指定的角色。

2、如何实现Restful风格的权限控制?

Restful风格的接口URL都是一样的,唯一的区别就是请求方法,所以如果想要实现权限的精细控制,就需要保留请求方法,比如POST、GET、PUT、DELETE....

您可以在权限表中的url字段中放置一个方法标识符,例如POST。 此时完整的URL为:POST:/order/info

当然,*:/order/info中的星号表示满足所有请求方法。

3、这样可以实现动态权限控制吗?

权限控制的方式有很多,比如Security自带的注解、方法拦截等。 事实上,扩展Spring Security还可以实现动态权限控制。 这个会在后面的文章中单独介绍!

陈老师的文章将权限和角色的对应关系存储在Redis中,所以如果想要实现动态权限控制游戏策划,只需要在Redis中维护这种关系即可。 Redis中的数据如下:

案例实施

本文仍然基于以下三个模块。 如果不清楚的话可以查看陈老师之前的文章。

名称 功能

oauth2-云验证服务器

OAuth2.0认证授权服务

oauth2-云网关

网关服务

oauth2-cloud-auth-common

公共模块

涉及到的变更目录如下图:

角色权限流程图_角色权限设计5张表_角色权限图

1.从数据库加载URL角色对应关系到Redis

项目一开始,直接读取数据库中的权限,加载到Redis中。 当然方法有很多种,大家可以根据情况进行选择。 代码如下:

角色权限流程图_角色权限图_角色权限设计5张表

这里的代码位于 OAuth2-cloud-auth-server 模块下。

文章来源:https://www.h3399.cn/202201/806696.html