基于RBAC模型的通用权限管理系统设计

706 阅读9分钟

摘要:

​ 随着企业业务需求的不断扩大,传统的特定系统权限管理已经无法满足需求,因此需要设计一种通用的权限管理系统。本课题以此为出发点,基于RBAC模型设计了一种可自定义角色权限类型及范围的多租户通用权限管理系统,可以对用户的菜单功能、接口及数据等权限进行授予及验证。权限管理是任何系统中必不可少的,而权限验证和权限传递是权限管理的两个主要方面。本系统采用基于角色的验证方式,用户可以自由转换角色范围以适应不同的业务需求。同时,权限传递可以在后端存储权限,也可以使用数字签名加密技术进行传递。本系统具有较高的灵活性和可扩展性,可以应用于大部分复杂的业务环境中。

1.引言

​ 随着信息技术的飞速发展,企业和组织的信息系统变得越来越复杂。在这些系统中,权限管理是至关重要的一环。传统的权限管理方法已经难以满足多租户、多系统、多角色的复杂需求。因此,我们需要设计一种通用的权限管理系统,以应对不断变化的业务需求。

​ 本文将介绍一种基于RBAC(Role-Based Access Control)模型的通用权限管理系统的设计和实现。我们将首先列出多租户系统的基本功能清单,然后讨论系统的功能域和权限类型的定义。接着,我们将介绍系统的动态和静态菜单模式,以及系统接入权限系统的步骤。最后,我们将探讨系统的可拓展权限配置方案,以及多租户要求和权限接口方案。

2.多租户系统的基本功能清单

​ 多租户系统的设计需要满足一系列基本功能,以下是这些功能的清单: 多租户系统-16907025085985.png 1.租户管理

​ 租户管理可支持平台应用下细分多个租户登录系统,同时租户与租户之间数据保持隔离;每个租户可以配置不同的权限;系统管理员可以获取所有租户数据信息,对租户账户、账户权限有直接管理权。

2.权限管理

​ 一个用户所拥有的权限与角色息息相关,当角色权限设置完成后再赋予到用户上,使其具有查看系统里指定功能的权利;修改权限需要对角色权限进行修改,实际是修改与角色关联的权限,而不是单独修改用户的权限。对于用户而言,角色是用户的一个属性,没有角色的用户只有系统的登录访问权限,没有数据查看和操作权。

3.数据安全

​ 数据安全隔离其实对于某一个账号来说是没有感知的,但实际上每个使用环节都由数据隔离的体现。比如作为应用可以给租户配置哪些权限,单独一个租户可以看到哪些用户信息等。数据隔离可以采用独立数据库、共享数据库通过数据表隔离或共享数据库和表字段的方式实现。

4.运营管理

​ 支持基于租户管理域,面向多个租户进行运营管理;同时也支持基于租户日常运营产生的数据进行管理;运营管理可以采用多种形式管理,如统计报表、运营支持、预警告知等。

2.1 功能域

​ 系统的功能结构可以分为四个业务域:

  • 租户域:描述租户的基本信息、组织结构和用户成员信息。

  • 租户管理域:描述租户的多级管理员和他们对应的企业应用权限以及数据范围权限。

  • 用户域:描述用户的基本信息、登录账号、实名认证和第三方账号绑定等。

  • 用户权限域:描述用户能够使用的企业应用和数据范围的权限信息。

2.2 多租户要求

​ 多租户系统需要满足一定的要求,包括域名规范和配置:

  • 域名规范: 多租户系统的域名应遵循规范,如<服务功能>.<服务环境>.com 的格式:<sdh|lsxy|zqb>.<rc|dev|pro>.com

  • 域名配置: 配置域名代理映射,确保多个域名可以映射到同一个IP地址,以支持多租户的访问,例如windows环境下hosts配置:

    127.0.0.1 public.dev.com  # 租户管理公共服务
    127.0.0.1 sdh.dev.com     # 省动环-租户
    127.0.0.1 campus.dev.com  # 绿色校园-租户
    

2.3 租户管理

2.3.1 公共租户管理

​ 1)域名:public.dev.com

​ 2)管理员: 管理租户及租户内部的超级管理员(is_superuser

​ 3)信息统计: 总用户数、每日总访问量等

2.3.2 租户内部管理

​ 1)域名:sdh.dev.com

​ 2)超级管理员: 拥有权限系统的全部权限,由公共租户管理员管理,可以为租户分配角色及权限

​ 3)用户: 每个角色分配权限时,只能小于或等于本身的权限,不可超过自身权限。

3.可拓展权限配置方案

​ 系统提供了可拓展的权限配置方案,以应对不同权限场景和未来可能的权限需求。

屏幕截图 2023-10-08 175451.png

  • 支持自定义权限配置;
  • 使用通用字段和扩展字段来管理不同类型的权限;
  • 角色授权时根据权限类型区分拓展权限;
  • 使用Kafka消息队列进行权限信息广播和同步。

3.1 可拓展权限结构

递归算法: 增删改方便,低层级查询方便;适用于一至四级层级结构,避免无限级结构递归读取

  • 根节点:每个根节点默认为每种权限类型(parent为空值)

  • 使用通用字段记录公共内容

  • 自定义权限使用 Json字段进行扩展 extend_content

3.2 权限赋权

  • 角色与权限组授权时,根据拓展权限类型区分权限,分别读取权限至页面
  • 授权存进数据库中存储, 权限组与拓展权限为多对多关系(第三张表为关联关系)

3.3 权限类型的定义

​ 在系统中,我们把权限分为两大类,分别是功能权限和数据权限:

  • 功能权限: 包括系统的目录导航、菜单的访问权限,以及按钮和API操作的权限
  • 数据权限: 包括定义数据的查询范围权限,在系统中,统一称作 ”组织“ 来管理数据权限

3.4 动静菜单

​ 功能权限数据的使用,分别为以下两种方式:

  • 动态菜单模式: 这种模式下,菜单的增删完全由权限系统接管。也就是说在权限系统增加菜单,应用系统会同步增加。这种模式好处是修改菜单无需项目上线。
  • 静态菜单模式: 菜单的增删由应用系统的前端控制,权限系统只控制访问权限。这种模式下,权限系统只能标识出用户是否拥有当前菜单的权限,而具体的显示控制是由前端根据权限数据来决定。

4.新系统接入权限系统

image-20231009100731183.png 系统接入权限系统需要以下步骤,其中1、2、3的步骤,都是在系统管理模块完成

  1. 创建系统

  2. 配置菜单功能权限

  3. 配置数据权限

  4. 创建系统的角色

d9941a4ec3f44b96be8391ca09b2560dtplv-k3u1fbpfcp-zoom-in-crop-mark3024000.png

4.1.微服务接入

微服务需要通过权限服务进行接入,其关键步骤包括:

  • 配置各个微服务地址:在权限系统中配置各个微服务的IP和端口信息,以便权限系统与这些微服务进行通信;
  • 区分每个系统应用组织:确定每个系统或微服务是否需要与特定组织关联,确保只有特定组织的用户能够访问该系统;
  • 微服务的用户进行授权与鉴权
4.1.1.资源服务接入

资源服务通过接口与权限系统进行交互,以获取用户权限信息。接入过程包括:

  • 资源同步数据至权限系统,同步方式可采用Kafka消息队列;
  • 资源调用权限接口进行权限校验;
  • 权限系统接收权限信息并进行相应处理。
  • 同步权限信息接口:将系统或微服务接入权限系统,首先进行全量信息同步至用户中心,然后通过后续接口增加、删除、修改权限信息。
  • 用户权限更新:在权限系统中,用户权限或基本信息发生变化时,需要通知前端进行权限更新,通常需要用户重新登录以使权限生效。

4.2.权限校验方案

​ 通用权限管理服务向系统提供权限服务,实现了增删改查、身份验证以及访问验证(功能和接口)。

  1. 用户登录系统,前端页面携带用户信息访问服务器,权限服务认证用户身份,通过后返回Token信息,否则重新认证;
  2. 成功认证后,页面请求服务器获取用户的功能页面权限,权限服务校验后返回功能权限,前端渲染用户页面;
  3. 用户访问功能页面,页面请求服务器接口,相关微服务通过请求权限服务校验用户的身份信息和接口访问权限并获取用户的数据资源权限;
  4. 微服务根据用户的数据资源权限过滤并返回数据,前端页面根据返回的数据渲染。

image-20231223171023036.png

5.结论

​ 本文介绍了基于RBAC模型的通用权限管理系统的设计与实现。这个系统满足多租户、多系统、多角色的复杂权限需求,包括租户管理、权限管理、数据安全、运营管理等功能。系统具有灵活的权限配置方案,支持自定义权限和可拓展权限,同时可以接入其他微服务和用户中心,满足不同系统的权限需求。多租户要求得到满足,并提供了权限接口方案,以方便前端和后端服务的访问和权限验证。

参考文章

【1】转转统一权限系统的设计与实现(设计篇)

【2】权限系统中的数据权限就该这么设计,yyds

【3】多租户系统设计

【4】SaaS多租户系统的架构设计