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

news2024/11/25 0:44:05

在这里插入图片描述

作者 | 天地练心

导读

本文详细探讨了统一权限管理服务(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.coloradmin.cn/o/880173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

提高考试成绩的有效考试培训系统

近年来,随着考试竞争的日益激烈,对于学生来说,提高考试成绩已成为一项重要的任务。为了帮助学生有效提升考试成绩,我们开发了一套全面而详细的有效的考试培训系统。 该培训系统作为一种全新的教学方法,力求通过提供多…

针对Android项目蓝牙如何学习

一、概述(Overview) 蓝牙是一种专有的开放式无线技术标准,用于在固定和移动设备之间进行短距离数据交换(使用2400–2480 MHz ISM波段的短波长无线电传输),从而创建具有高度安全性的个人局域网(PANs)。由电信供应商爱立信(telecoms vendor Ericsson)于1994年创建,[1…

ssm+vue线上旅行信息管理系统源码和论文PPT

ssmvue线上旅行信息管理系统源码和论文PPT011 开发工具:idea 数据库mysql5.7(mysql5.7最佳) 数据库链接工具:navcat,小海豚等 开发技术:java ssm tomcat8.5 1、立论依据(课题来源、选题依据和背景情况、课题研究目的、理论意义…

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

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

苹果笔记本清理内存免费工具CleanMyMac X

苹果笔记本怎么清理内存?最简单粗暴的方式,就是下载专业的清理工具,可以帮助我们高效地清理苹果笔记本上的垃圾文件。比如苹果官方都推荐的CleanMyMac X,就可以自动扫描并清理系统中的垃圾文件,帮助我们省去手动操作的…

开学季值得买电容笔有哪些?推荐平价好用的电容笔

大多数的学生党都没有稳定的经济来源,因此在挑选东西时都追求着高性价比。随着iPad平板电脑的性能不断提高,其所具备的功能将不断增加,它将逐渐融入我们的生活与工作。由于电子产品的不断升级,软件的改进,使得电容笔的…

应用在家庭影院触摸屏中的高性能低功耗触摸芯片

家庭影院的主要思想是获得清晰的画面和令人惊叹的环绕声。这可以通过多个电子元件的组合轻松实现,为您提供真正的剧院体验。家庭影院系统所需的电子设备,主要有:扬声器、电视或投影仪、媒体设备和接收器。这些设备以不同的方式工作&#xff0…

FPGA应用学习笔记-----复位电路(二)和小结

不可复位触发器若和可复位触发器混合写的话,不可复位触发器是由可复位触发器馈电的。 不应该出现的复位,因为延时导致了冒险,异步复位存在静态冒险 附加素隐含项,利用数电方法,消除静态冒险 这样多时钟区域还是算异步的…

20. 有效的括号 题解

题目描述:20. 有效的括号 - 力扣(LeetCode) 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号…

用于全局复根和极点查找算法的自适应网格生成器(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

JS 将 json 对象转成字符串并保留格式 - JSON.stringify()

JSON.stringify(value, replacer, space) value:将要序列化成一个 JSON 字符串的值。 replacer(可选):如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理&#xf…

Prometheus的搭建与使用

一、安装Prometheus 官网下载地址:Download | Prometheus 解压:tar -zxvf prometheus-2.19.2.linux-amd64.tar.gz重命名: mv prometheus-2.19.2.linux-amd64 /home/prometheus进入对应目录: cd /home/prometheus查看配置文件&am…

item_get_desc-获得TB商品描述

一、接口参数说明: item_get_desc-获得淘宝商品描述,点击更多API调试,请移步注册API账号点击获取测试key和secret 公共参数 请求地址: https://api-gw.onebound.cn/taobao/item_get_desc 名称类型必须描述keyString是调用key(点…

安全加密框架图——Oracle安全开发者

Oracle安全开发者 ACLs 设计 ACLs(访问控制列表)时,可以根据以下思路进行设计: 所有者文件权限:确定文件的所有者能够对文件执行哪些操作,如读取、写入、执行等。这可以根据文件的性质和拥有者的职责来决…

Cygwin 配置C/C++编译环境以及如何编译项目

文章目录 一、安装C、C编译环境需要的包1. 选择gcc-core、gcc-g2. 选择gdb3. 选择mingw64下的gcc-core、gcc-g4. 选择make5. 选择cmake6. 确认更改7. 查看包安装状态 二、C、C 项目编译示例step1:解压缩sed-4.9.tar.gzstep2:执行./configure生成Makefile…

Nginx网站服务(安装nginx、平滑升级nginx、nginx各种访问配置)

一、Nginx概述 1、什么是nginx? 稳定性高、系统资源消耗低、对HTTP并发连接的处理能力高(单台物理器可支持30000-50000个并发请求) NG并发连接能力有2个因素的影响 ①CPU的个数 ②本地吴立琪系统的最大文件打开数2、Nginx应用场景 静态服…

日常BUG——普通页面跳转tabbar页面报错

😜作 者:是江迪呀✒️本文关键词:日常BUG、BUG、问题分析☀️每日 一言 :存在错误说明你在进步! 一、问题描述 微信小程序页面跳转的时候出现下面的问题: wx.redirectTo({url: /pages/index/i…

行业分析(思维逻辑)

1、 如何着手分析一个行业? - 知乎做行业分析,很容易陷入一个误区,就是认为:我只要能找到最全的、最准的信息,就能做好行研。所以很多知…https://www.zhihu.com/question/20219092/answer/666346625 2、 3、 4、 …

Linux下搭建java环境

文章目录 一,xshell链接linux二,linux安装jdk环境 一,xshell链接linux 这里用到的工具,VMware搭配CentOS7 64位Xshell5 操作之前确保,传输Xshell连接了虚拟机 打开Xshell,文件->新建 主机ip—>进入虚拟机,右键打开终端,输入命令:ifco…

统筹型人才PK执行型人才,有啥区别?

统筹型人才PK执行型人才,有啥区别? 在大企业成长序列中 在着力培养统筹型人才 趣讲大白话:将还是兵? 【趣讲信息科技257期】 **************************** 我有华为公司当员工的同事 当干到一定年龄和职位后 有个判定&#xff1a…