去年底转转启动建设统一权限管理系统,到今天公司大部分业务系统都已经用上了。本系列将会分为三部分来分享下转转新权限系统的设计与实现。今天先分享第一部分设计篇,后续还将分享后端架构和前端架构部分,大家可以关注公众号 转转技术,不错过每一篇的更新。
老权限系统的问题与现状
转转公司在过去并没有一个统一的权限管理系统,权限管理由各业务自行研发或是使用其他业务的权限系统,权限管理的不统一带来了不少问题:
- 各业务重复造轮子,维护成本高
- 各系统只解决部分场景问题,方案不够通用,新项目选型时没有可靠的权限管理方案
- 缺乏统一的日志管理与审批流程,在授权信息追溯上十分困难
基于上述问题,去年底公司启动建设转转统一权限系统,目标是开发一套灵活、易用、安全的权限管理系统,供各业务使用。
业界权限系统的设计方式
目前业界主流的权限模型有两种,下面分别介绍下:
- 基于角色的访问控制(RBAC)
- 基于属性的访问控制(ABAC)
RBAC模型
基于角色的访问控制(Role-Based Access Control,简称 RBAC),指的是通过用户的角色(Role)授权其相关权限,实现了灵活的访问控制,相比直接授予用户权限,要更加简单、高效、可扩展。
用一个图来描述如下:
当使用 RBAC模型 时,通过分析用户的实际情况,基于共同的职责和需求,授予他们不同角色。这种 用户 -> 角色 -> 权限 间的关系,让我们可以不用再单独管理单个用户权限,用户从授予的角色里面获取所需的权限。
以一个简单的场景(Gitlab 的权限系统)为例,用户系统中有 Admin、Maintainer、Operator 三种角色,这三种角色分别具备不同的权限,比如只有 Admin 具备创建代码仓库、删除代码仓库的权限,其他的角色都不具备。我们授予某个用户 Admin 这个角色,他就具备了 创建代码仓库 和 删除代码仓库 这两个权限。
通过 RBAC模型 ,当存在多个用户拥有相同权限时,我们只需要创建好拥有该权限的角色,然后给不同的用户分配不同的角色,后续只需要修改角色的权限,就能自动修改角色内所有用户的权限。
ABAC模型
基于属性的访问控制(Attribute-Based Access Control,简称 ABAC)是一种比 RBAC模型 更加灵活的授