基于RBAC改进的用户权限管理和鉴权设计思路1

前言:在分布式微服务系统中,鉴权是一个调用非常频繁且非常重要的模块,而如果在每个微服务子系统中都加入鉴权代码,则会导致代码冗余程度非常高,例如本人公司目前的工程中,子系统就多达11个。那么鉴权如果不能在每个微服务中都写一套代码,那应该写在哪里呢?思考一下,我们需要对每个请求都进行鉴权,所以我们需要在一个所有请求都要经过的路上设置一道关卡,来检查是否有权限访问该接口或者令牌合不合法,那这个所有请求都要经过的地方是哪里呢?答案就是:网关服务。

那么这里还是会有一个问题:既然我是一个分布式微服务系统,那么网关也可能会有多个,那我岂不是也要在每一个网关去写鉴权代码?

答:接下来就要请出我们今天的主角——鉴权中心。有了鉴权中心,所有的请求鉴权都会在鉴权中心进行,这样就不用在每个网关都写一套鉴权代码了。

知道了鉴权节点后,我们先来构建我们的UPMS服务。

UPMS:User and Permission Management System 用户与权限管理系统


Step1:构思用户体系和构建用户权限模型。

我们在进行一个系统的构建时,用户体系的构思和构建是必不可少的,这关系到我们这个系统的接口安全问题,所以我们需要搭建出一套完整的用户权限控制模型,也就是RBAC权限模型。

市面上现在已经有非常多的RBAC权限模型可以供各位参考,这里我就不过多赘述RBAC的概念了,各位不了解的小伙伴可以自行百度,知乎上也有非常多通俗易懂的解释。

接下来,我就根据我自己的需求来构建一个RBAC模型:由于本人自主搭建的一个网站是属于B2C的网站,所以我我们只需要对B端用户后台管理进行权限模型的引入,而C端则暂时无需做权限控制。


Step1-1:对经典RBAC模型的优化设计。

在大多数后台管理系统中,权限模块的设计,很多都是基于经典的 RBAC 权限设计模型。

然而在实际生产环境中,如果只是照搬经典的 RBAC 模型,是很难满足实际项目的需求。

比如,简单的 RBAC 只能覆盖后台接口 (权限资源) 的权限验证,对于前后端分离的架构,是无法控制前端页面组件的显示隐藏,或是禁用可用的。

所以,为了更好的支持前后端分离的架构,我们可以引入权限字,用来唯一标识前端的页面组件,比如按钮组件、卡片或Tab容器组件等。下面先简单对比一下典型 RBAC 和引入权限字后权限模型的差别。

在用户登录时,后台登录接口会根据当前用户Id,获取该用户实际可用的权限字列表和权限资源列表,分别返回给前端和存入后台 Redis 缓存。权限字列表在返回前端后,前端应用会将其保存至浏览器的 SessionStorage 中,每次访问表单页面时,都会逐一比对页面组件的标识符,是否存在于当前 SessionStorage 缓存的已授权权限字列表之中,如不存在,按钮组件将被禁用,而卡片或Tab容器组件会被直接隐藏。

请仔细理解一下上面这段话:前端的每一个组件都会有一个唯一的权限字标识,对应sys_perm_code权限字表,在用户登录时,会把所有当前用户相关的权限字和权限资源反会到前端的SessionStorage中,前端再通过具体的权限字来判断组件是否需要隐藏。


Step1-2:权限模块表设计及应用

我们对经典的RBAC模型进行改进设计后,我们就可以开始从概念模型到关系模型的转化了。

我这里使用到的模型转化工具是PowerDesigner,他可以很方便的帮我们实现从概念模型(ER)到关系模型(代码)的转化。PowerDesigner的使用可以参考以下文章:PowerDesigner(CDM)画ER图并导出且在DBMS中运行_cdm怎么画_*Slime*的博客-CSDN博客https://blog.csdn.net/qq_43333395/article/details/105858979

我们对上面的模型进一步细化,落实到每一个需要创建的表上:

 注:请忽略PowerDesign生成的外键。

中间有个小插曲:写到一半发现还未设置基础属性自动填充,所以去配置了一下对所有实体Model中的基础属性(如:updateUser、createUser等)填充的MybatisPlus处理器。

有兴趣的小伙伴可以点击我另外发布的链接查看配置过程,里面还包含了MybatisPlus元数据处理器的源码分析等干货:MybatisPlus元数据处理器源码探究:自动写入创建时间、创建人人等。(包含反射浅度探究)_ToneyMa的博客-CSDN博客https://blog.csdn.net/Mccson/article/details/131429647


Step2:搭建服务。

表构建好之后,我们就可以开始搭建我们的鉴权中心服务了。目录结构如下图:

 这边我们把Upms放到跟Gateway放到同一级的父模块中去,具体的项目架构在这里不做详细的介绍,有兴趣的可以查看该开源项目:LT-travel: 高度遵守阿里巴巴开发规范打造的微服务脚手架 (gitee.com)icon-default.png?t=N5K3https://gitee.com/PonyMaxinzhe/LT-travel

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值