浅谈统一权限管理服务的设计与开发

在这里插入图片描述

作者 | 天地练心

导读

本文详细探讨了统一权限管理服务(MPS)的设计与开发,针对企业内部多平台权限管理混乱的问题,提出了一套综合RBAC、ACL、DAC权限模型的解决方案。文章从需求分析、技术选型、功能设计等方面全面介绍了MPS的构建过程。在平台&节点管理方面,MPS支持多种业务平台接入方式,同时提供节点管理和组织管理功能。权限管理模块涵盖历史权限导入、权限分配、鉴权服务等。申请&授权模块实现了线上申请、审批流程和自动授权功能。权限审计&回收模块支持权限数据下载、操作日志记录以及权限续期与回收。MPS的成功应用于百度内部展示了其卓越性能与潜力,有望为未来实现更高效的企业权限管理提供强有力的支持。

全文6171字,预计阅读时间16分钟。

01 背景

在当今信息技术高速发展的时代,企业内部的应用系统和数据平台日益增多,这些平台负责的业务、功能设计不尽相同,各平台权限系统自建,没有统一的权限设计和规范的权限管理,导致出现权限管理混乱和层级划分不明的问题。为了解决这一问题,移动数据中台决定开发一套统一权限管理服务(MEDD Permission Service,以下简称MPS),旨在整合数据中台所有平台权限,实现打通平台权限、业务、用户的集中管理,为未来实现全面的数据权限和平台工具互通的权限管理方式提供强有力的管理服务。

本文将详细介绍统一权限管理服务的设计与实现,包括需求分析、技术选型、功能设计、平台&节点管理、权限管理、申请&授权、权限审计与回收等方面的内容。

02 需求分析

在需求分析阶段,需要与相关的业务平台和数据平台团队沟通,了解他们的权限系统特点、权限管理问题以及他们对统一权限管理服务的期望。需求分析主要包括:

平台权限整合:确定需要整合的业务平台和数据平台,了解它们的权限系统架构和功能,以便确保MPS能够与它们无缝集成。

权限层级划分:明确权限的层级划分,包括用户角色、组织结构、资源类型等,以便建立合理的权限模型。

统一认证:确定是否需要引入统一的认证机制,以提高用户体验和安全性。

审批流程:定义权限的申请、审批和回收流程,确保安全性和灵活性,同时考虑审批流程的可定制性。

API接口:考虑业务平台如何接入MPS,设计简洁且易于集成的API接口,同时确保接口的安全性。

03 技术选型

MPS选择使用GDP(Go Develop Platform)框架开发,GDP作为百度内部研发的Go开发框架,具备以下优势:

厂内基础设施支持:GDP在百度内部得到广泛应用,因此可以更好地与百度内部的基础设施和生态系统进行集成,提供更稳定和高效的服务。

易配置、易组装:权限管理服务可能需要根据不同业务平台的要求进行灵活的组装和配置,GDP的易配置、易组装特性能够帮助实现这一点。

RPC能力和通用基础库:权限管理服务需要与其他系统进行通信和集成,GDP提供了完善的RPC Client和RPC Server能力,同时配备通用基础库,有助于快速开发和集成。

支持标准化监控:GDP支持基于Prometheus的标准化监控解决方案,这有助于对MPS进行全面监控和运维。

04 权限模型设计

完成了业务平台的需求分析之后,我们要基于确定接入的业务平台的业务场景确定使用的权限模型,MPS采用了综合RBAC和ACL、DAC的权限模型,以实现灵活、精确的权限控制。这种综合模型结合了三种访问控制的优点,为业务平台权限管理提供了更多的灵活性和粒度控制。

MPS将业务平台的权限分为两大类:

业务权限:业务平台用户对某个节点或者权限包的权限,分为业务读权限、业务写权限和自定义权限类型。例如,用户在业务平台查看报表时所需要的读权限。

管理权限:在MPS系统业务平台界面进行操作的权限,具体分为以下操作:

  • 操作业务平台用户并授予其节点或权限包的权限。

  • 操作业务平台权限包变更。

  • 操作业务平台节点上、下线和属性及结构变更。

MPS通过将权限分类后灵活运用到ACL、DAC和RBAC三种权限模型中。

ACL(Access Control List):ACL是一种基于资源的访问控制模型,它将资源的访问权限授予用户或用户组的列表。每个资源都有一个ACL,其中列出了允许或拒绝访问该资源的主体及其对应的权限。ACL模型适用于细粒度的访问控制,可以实现针对单个资源的精确权限管理。ACL模型在MPS中体现为支持授予用户特点节点的权限,从而实现对节点的细粒度访问控制。

DAC(Discretionary Access Control):DAC是一种基于资源所有者的访问控制模型,资源的所有者有权自主决定谁有权访问其资源。在DAC模型中,资源的访问权限由资源的所有者设置,他们可以授权其他用户或用户组来访问自己的资源,并可以随时撤销这些授权。结合DAC模型的思想,MPS基于业务平台定义了不同用户角色,如超级管理员、节点管理员、普通用户等,每个用户角色拥有不同的菜单和节点管理权限, 有用户角色的用户可以自主的授予所属业务平台其他用户的业务权限。

RBAC(Role-Based Access Control):RBAC是一种基于角色的访问控制模型,它将权限授予角色,再将角色授予用户。在RBAC模型中,角色代表一组相关的权限,而用户通过被分配到相应的角色来获取权限。RBAC模型适用于大规模的访问控制,通过角色的管理可以简化权限分配和维护,提高了权限管理的效率和可维护性。MPS支持用户将多个节点组合为权限包,再将用户加入到权限包的方式授权。

05 功能设计

根据需求分析的结果,对MPS进行功能划分,将权限管理服务划分为四大模块,每个模块负责不同的功能。

1、平台&节点管理:

  • 支持多个平台的接入,支持使用默认模板参数和定制化参数

  • 支持节点的接入和组织管理。节点定义:业务平台抽象的需要进行权限管理的资源,例如报表、按钮、页面链接等

2、权限管理:

  • 历史权限导入

  • 平台管理权限的增删改查功能

  • 平台业务权限的增删改查功能

  • 鉴权服务

3、申请&授权:

  • 用户线上申请、定制审批流程、审批通过自动授权

  • 权限变更后回调业务平台,可自定义回调方法

4、权限审计&回收:

  • 权限到期、用户离职转岗等场景下权限自动回收

  • 业务平台操作记录推送

  • 权限审计数据下载

06 平台&节点管理

业务平台接入MPS需要提供以下初始化参数:

  1. 平台基本信息,存储在图表 1中的平台基础信息表

  2. 平台的自定义权限类型,MPS默认为每个平台生成业务读、写权限,平台可以自定义更多的业务权限类型,存储在图表 1中的平台权限类型表

  3. 平台定制化菜单栏,MPS默认提供通用的菜单栏,平台可以选择使用其中一部分,存储在图表 1中的平台菜单表

图片

△图表 1 业务平台管理

初始化参数确定之后,MPS会创建一个基础业务平台(见图表 3)。MPS为每个业务平台初始化一个初始节点,同时生成openapi访问密匙,存储在图表 1中的平台密匙表,MPS提供了完善的openapi接口,密匙分为主密匙和次密匙,主密匙可以访问MPS提供的所有openapi接口,次密匙在生成的时候需要指定访问的openapi接口范围,访问超出范围的api会鉴权失败。

平台初始化完成之后,业务平台开发工程师可以将业务节点同步到MPS了,MPS提供了两种节点同步方案:

:业务平台将业务中需要进行权限管控的资源抽象为树结构,并通过MPS提供的节点相关openapi接口将业务节点树同步到MPS平台。

:业务平台需要按照MPS指定返回数据格式提供一个获取节点树结构的接口,MPS会实时获取业务节点数据,并将其挂载在初始节点下。

方案一MPS会在本地存储节点数据,分为两张表存储,基础信息存储在节点信息表,树结构关系存储在节点树组织表(见图表 2)。

图片

△图表 2 节点管理

方案一当业务节点变化的时候,例如报表下线,需要业务方将变化同步到MPS,如果同步失败会导致数据不一致问题,可以通过定时全量同步和错误报警解决,优势在于MPS存储了节点数据,可以提供稳定的权限管理服务。

方案二优势在于实时去获取业务方的节点数据,可以第一时间感知节点变化,劣势在于如果获取数据失败,只能使用缓存数据,可能和实时节点数据有差异,影响部分功能的使用。

综上,考虑到业务平台的节点变化频率有限,权限管理服务更注重系统的可用性和可靠性,MPS推荐使用方案一。

图片

△图表 3 MPS基础业务平台

07 权限管理

业务平台接入MPS之后,为了不影响现有用户使用体验,需要将已有的用户业务权限数据导入到MPS中,MPS为此提供了批量添加权限的openapi接口。

历史用户权限数据导入完成后,对于增量业务权限,需要先添加平台管理员,管理员再通过MPS界面对用户进行授权操作。

业务平台的平台管理员分为两种类型:

超级管理员:有所有菜单权限和所有节点的管理权限

节点管理员:有部分菜单权限和部分节点的管理权限,将用户设置为某个节点的节点管理员,用户可以管理此节点和下面的所有子节点。

一般来说,一个平台的超级管理员控制在2-3人,作为兜底的负责人使用,具体授权操作由业务平台下各个节点管理员负责。

为了实现同一个用户在MPS中多个业务平台之间的权限隔离,用户需要在MPS建立一个业务平台账号。平台管理员可以先搜索一个用户,如果这个用户不是当前平台的用户,需要先将用户添加到平台,MPS在用户基础信息表存储用户的基本信息,在用户平台账户表存储用户在每个平台的账户信息,这样纵向通过用户账户将用户在每个平台数据隔离开,横向又可以通过用户名总览用户跨平台的权限,方便权限review使用。

MPS支持两种权限授权管理方式:

  • 直接给用户添加节点的权限

  • 将多个节点添加到权限包(见图表 4),再将用户添加到权限包

第一种方式在权限review时更加清晰,第二种方式在批量添加权限时更方便。

图片

△图表 4 权限包创建

添加完用户权限之后,业务平台开发工程师需要在业务系统内部接入MPS的鉴权服务,当用户登录业务平台访问资源时,调用MPS的鉴权接口计算用户权限,MPS鉴权服务支持多种权限计算参数:

继承父级权限:计算用户对于某个节点的权限时,可以只计算当前节点权限,也可以选择继承模式,从当前节点递归寻找父节点权限,直到寻找到或者到达根节点为止。

权限包或节点权限优先:支持权限包权限和节点权限哪个计算优先级更高,也可以混合计算。

图片

△图表 5 用户权限管理

08 申请&授权

业务平台用户添加权限可以通过平台管理员手动授权,但是这种方法的劣势很明显:

  • 用户需要和管理员沟通并邮件或者IM备案,效率低下

  • 权限管理占用了管理员大量时间且可能误操作

  • 权限review时,查找权限开通的全流程记录成本高

为了提升工作效率,减少用户和管理员负担,设计了如图表 6的线上授权流程

图片

△图表 6 用户线上申请流程

MPS平台设计了两种线上申请的接入模式:

完全托管模式:MPS提供了一套通用的权限审批模型和申请页面(如图表 7),业务平台在用户访问资源无权限时跳转到MPS权限申请页面。对于用户来说只需要关心填写工单内容和选择申请的节点或者权限包,对于平台只需要定制好每个节点的审批人。

自建页面模式:如果通用的权限申请页面不满足业务平台的需求,可以自行开发前端页面,之后调用MPS的申请单提交接口即可,后续的审批和授权由MPS负责。

图片

△图表 7 MPS申请页面

MPS使用百度内部流程系统来提供审批能力,审批流程可以理解为如图表 8的链式步骤。通过调研接入的业务平台,发现不同平台的审批流程需求差异性较大,有些平台所有节点都只需要一位负责人审批,有些平台根据节点的不同设置不同的审批流程。对于流程系统需要先确定好审批流程,之后用户申请就生成一个审批流程的实例。可以把审批流程理解为程序代码开发中的一个实体类,如果对于需要多种审批流程的平台每个审批流程的节点都定制一个类,管理成本较高且扩展不灵活。

为此,MPS调研了平台的已有审批流程,设计了如图表 8所示的通用审批流程类,为每个节点设置是否需要的参数,相当于为通用审批流程类设置了一个多个参数的构造函数。数据审批人就是业务平台设置到节点上的审批人,业务平台可以在同步节点的时候指定审批人,也可以管理员在图表 10中配置。业务平台的节点需要设置一个新的审批流程时只需要提供定制化的参数,就可以生成符合需求的审批实例。

图片

△图表 8 通用审批流程

图片

△图表 9 线上申请管理

图片

△图表 10 节点属性变更

用户提交申请之后,由审批人进行审批,审批结束会回调MPS给用户进行授权,根据一些业务平台的需求MPS支持了事件回调,业务平台可以配置回调方法,当自动授权后可触发业务平台回调。

09 权限审计&回收

对于业务平台来说,经常会以季度或者月为周期对某些节点的权限进行review,判断用户权限是否符合预期,并回收不符合预期的用户权限,延长部分快到期的用户权限。

MPS提供了完善的权限审计能力:

  • 用户权限下载:业务平台可以在报备之后下载节点用户权限数据。

  • 每日操作日志:MPS会记录业务平台上管理员的所有权限操作和节点操作并发送邮件给配置的接收人。

  • MPS提供了完善的权限续期&回收能力:

  • 通过每天的定时任务检测用户,收集有效期少于10天的用户权限,并向用户发送续期邮件,邮件中带有续期申请的链接,用户可以跳转到申请页面申请权限续期。

  • 每天定时获取离职和转岗的用户,对于离职用户,MPS会将该用户帐号的状态设置为失效,业务平台鉴权时会判断用户状态,用户状态为失效时,直接返回该用户无权限。对于转岗用户,MPS会将该用户置于观察名单,并发送邮件给用户的上级,由用户的上级来判断是否保留该用户的权限,上级确认保留,用户从观察名单移出,反之将该用户的账号冻结。如果需要恢复用户权限时,也只需要恢复用户账号的状态即可。

MPS同时支持邮件订阅服务,管理员只需要订阅相关邮件,MPS会每天发送平台相关的权限变更邮件和抄送发送给平台用户的邮件。

图片

△图表 11 权限回收和审计

10 总结

经过接入平台推广效应的推动,结合使用用户的反馈意见进行升级和性能提升,MPS已成为数据中心的核心权限系统,并在百度MEG内部获得广泛应用。其接入已覆盖近40个业务平台,有效管理超过10万个权限节点,涵盖50多个审批模型。每月处理约2000至3000条权限申请工单,服务超过2万名用户。每日API调用峰值高达130万次,并能够提供每日30万次的鉴权服务。

MPS的卓越性能源于明确的管理功能划分和通用权限审批模型的巧妙应用。这为系统提供了强大的权限管理、申请和授权功能,解决了过去权限管理混乱和层级不明确的问题。同时,它还保障了数据的安全性与合规性,显著提升了用户体验和工作效率。

展望未来,MPS具备进一步扩展和通用化的潜力,可以为更多业务平台接入提供支持,实现全面的一体化权限管理,促进平台工具之间的互通。这必将进一步增强移动数据中心的权限管理体系,为企业提供更高效可靠的权限管理服务。

——END——

推荐阅读

百度APP iOS端包体积50M优化实践(五) HEIC图片和无用类优化实践

百度知道上云与架构演进

百度APP iOS端包体积50M优化实践(四)代码优化

百度App启动性能优化实践篇

扫光动效在移动端应用实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/91063.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云ACP知识点

前言:记录ACP错题 1、在创建阿里云ECS时,每台服务器必须要包含_______用来存储操作系统和核心配置。 系统盘(不是实例,实例是一个虚拟的计算环境,由CPU、内存、系统盘和运行的操作系统组成;ESC实例作为云…

2023国赛数学建模E题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

纯js点击按钮切换首页部分页面

像我这种大数据的,不会前端的,懒得学框架,现在有gpt了,前端对于我来说,用原生的更加友好,毕竟算法gpt都能优化。 首页我有个页面,然后我现在想点击gm替换上面的统计,点击用户替换回…

Flask Web开发实战(狼书)| 笔记第1、2章

前言 2023-8-11 以前对网站开发萌生了想法,又有些急于求成,在B站照着视频敲了一个基于flask的博客系统。但对于程序的代码难免有些囫囵吞枣,存在许多模糊或不太理解的地方,只会照葫芦画瓢。 而当自己想开发一个什么网站的时&…

SpringCloud微服务之间如何进行用户信息传递(涉及:Gateway、OpenFeign组件)

目录 1、想达到的效果2、用户信息在微服务之间传递的两种途径3、用RuoYi-Cloud为例进行演示说明(1)网关将用户信息写在请求头中(2)业务微服务之间通过OpenFeign进行调用,并且将用户信息写在OpenFeign准备的请求头中&am…

Qt+C++自定义控件仪表盘动画仿真

程序示例精选 QtC自定义控件仪表盘动画仿真 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC自定义控件仪表盘动画仿真>>编写代码&#xff0c;代码整洁&#xff0c;规则&…

浅谈SMT行业MES系统生产管理的特点

一、SMT生产车间在电子制造中起重要作用的部分&#xff0c;主要具备以下生产特点&#xff1a; 1.高密度和高速度&#xff1a; SMT生产车间中的电子元器件一般来说较为精小&#xff0c;且被紧密地排列在PCB上。这就要求SMT生产车间的机械设备具备高精度和高速度&#xff0c;确保…

怎么对视频进行压缩?

怎么对视频进行压缩&#xff1f;视频压缩&#xff0c;我们都知道是将视频文件进行压缩变小的过程&#xff0c;是我们日常办公中较为常用的手段。现如今&#xff0c;在视频技术不断发展与创新的基础上&#xff0c;视频分辨率也在不断提高&#xff0c;进而导致文件占有量也非常大…

前后端分离------后端创建笔记(05)用户列表查询接口(下)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

设计HTML5图像和多媒体

在网页中的文本信息直观、明了&#xff0c;而多媒体信息更富内涵和视觉冲击力。恰当使用不同类型的多媒体可以展示个性&#xff0c;突出重点&#xff0c;吸引用户。在HTML5之前&#xff0c;需要借助插件为网页添加多媒体&#xff0c;如Adobe Flash Player、苹果的QuickTime等。…

DoIP学习笔记系列:(六)满足AES128-CMAC算法的“安全认证”.dll生成实践

文章目录 1. 算法Demo2. 算法实现传送门 DoIP学习笔记系列:导航篇 AES128-CMAC算法在汽车电子控制单元的软件开发中涉及到安全相关的需求经经常用到,具体的算法原理请各位小伙伴自行百度,本篇主要向大家分享该算法如何集成到.dll文件中,在OTA、刷写等场景作为$27服务的安全…

python -m参数的作用(python3 -m)

文章目录 Python -m 参数的作用直接执行模块代码模块自测试环境隔离避免名称冲突 其他&#xff1a;python3 --help Python -m 参数的作用 在Python中&#xff0c;使用-m参数可以执行一个模块作为脚本。它是用于从命令行直接运行一个Python模块的标志。这种方式具有以下几个方面…

RocketMQ消息轨迹产生的背景以及使用方式

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 背景 最近在维护RocketMQ经常会出现这种问题 消息发送方和接收方出现扯皮&#xff0c;消息发送方说我的消息已经发送成功了&#xff0c;消费方说我没接收到消息。…

uni——初次加载问题处理(赋值后再调用)

案例描述 此案例中 一进页面接收good_id并调用接口&#xff0c;这个流程正常。 这个changeNum也是一进页面就触发了&#xff08;组件购物车加减自带&#xff09;&#xff0c;且触发的顺序在onload赋值id之前&#xff0c;这时候good_id还是为空&#xff0c;所以接口报错。如何处…

十一、避开客户端控件——收集用户数据

文章目录 一、HTML表单1.1 长度限制1.2 基于脚本的确认1.3 禁用的元素 二、浏览器拓展2.1 常见的浏览器拓展技术2.2 攻击浏览器扩展的方法 一、HTML表单 应用程序使用客户端控件限制客户端提交的数据的另一个主要控制对象&#xff0c;是由客户端计算机自己收集的数据。 HTML表单…

Python-OpenCV中的图像处理-图像直方图

Python-OpenCV中的图像处理-图像直方图 图像直方图统计直方图绘制直方图Matplotlib绘制灰度直方图Matplotlib绘制RGB直方图 使用掩膜统计直方图直方图均衡化Numpy图像直方图均衡化OpenCV中的直方图均衡化CLAHE 有限对比适应性直方图均衡化 2D直方图OpenCV中的2D直方图Numpy中2D…

Medical Isolated Power Supply System in Angola

安科瑞 华楠 Abstract: Diagnosis and treatment in modern hospitals are inseparable from advanced medical equipment, which are inseparable from safe and reliable power supply. Many operations often last for several hours, and the consequences of a sudden pow…

欢迎光临,博客网站

欢迎光临&#xff1a;YUNYE博客~https://yunyeblog.com/更多的文章&#xff0c;供大家参考学习&#xff01;&#xff01;&#xff01;

Mybatis 源码 ④ :TypeHandler

文章目录 一、前言二、DefaultParameterHandler1. DefaultParameterHandler#setParameters1.1 UnknownTypeHandler1.2 自定义 TypeHandler 三、DefaultResultSetHandler1. hasNestedResultMaps2. handleRowValuesForNestedResultMap2.1 resolveDiscriminatedResultMap2.2 creat…

VSCode使用SSH无密码连接Ubuntu

VSCode使用SSH无密码连接Ubuntu 前提条件&#xff1a; 1. 能够正常使用vscode的Remote-ssh连接Ubuntu 2. Ubuntu配置静态ip&#xff08;否则经常需要修改Remote-ssh的配置文件里的IP&#xff09; 链接-> ubuntun 18.04设为静态ip&#xff08;.net模式&#xff0c;可连接…