文章

权限概念模型设计

以 B2B 电商场景为例,梳理其中复杂的权限场景,通过概念模型快速了解大致需要涉及哪些模型以及这些模型之间的关系,并通过这些模型梳理出设计要点。

权限场景

多应用端:Admin PC Web Portal、Customer PC Web Portal、H5 Mobile、Mini-Program、Android App、IOS APP

登陆/注册平台:企业 SSO 系统、Mini Program、自定义注册页面等

认证:

 - SSO发起登陆:用户通过 SSO 登陆,登陆成功后创建用户账号
 - 小程序发起登陆:用户通过小程序登陆,登陆成功后创建用户账户
 - 用户注册登陆:用户通过访问注册页面,注册账户并登录系统

SSO Login Process(非小程序端):

image-20240629213114963

Mini Program Login Process(官方图例):

img

授权:

 - 不同端用户:可采用灵活的角色分配方式,通过内置角色默认赋值或者通过超级管理员进行配置
 - 内置角色:比如小程序端内置游客、普通会员等角色;未注册时以游客访问;注册登陆后成为普通会员
 - 初始化超级管理员:系统上线初始化超级管理员角色,便于后续用户账号的权限配置
 - 管理员配置权限:超级管理员可以配置用户账号的角色、资源和数据权限,便于精细化管理用户的权限
 - 管理员禁用账号:超级管理员可以禁用账号,账号将不可登陆系统

概念模型设计

image-20240706110208996

设计要点:

  1. 用户通过不同平台进行登陆或注册,比如:SSO 平台、MiniProgram、定制化登陆注册页面

  2. 用户可以大致区分了两类,一类是外部用户,一类是内部用户;不同类型的用户可能采用不同的方式进行注册登陆

  3. 功能权限:用户拥有的角色,在某一个 Client 端能够看到什么菜单、页面、按钮,可以调用哪些 API 接口;通过资源来定义需要控制访问的对象,比如:菜单、页面、API 接口等

  4. 数据权限:用户通过数据权限维度配置,决定可以看到或操作哪些范围的数据

  5. 组织树:通过企业内组织树/职位判断上下级关系,上级一般需要自动继承下级的权限

  6. 在简单场景中,使用传统的 RBAC 模型,用户通过分配角色来获取权限,但在一些复杂的企业级应用中,无法完全满足需求,因此引入身份的概念,一个身份是一组角色和数据权限的集合,用户在应用中可以切换身份来使用不同的角色和数据权限集合;同时用户还可以扮演多个身份,比如:一个员工在不同项目中可能扮演开发者、审计员和项目经理等不同的身份,每个身份对应不同的权限

  7. 应用:表示不同的前端 Portal,比如管理端应用、商城端应用等;不同的应用有不同的权限体系

  8. 采用微服务架构,可通过 API Gateway 做统一的认证,微服务间默认相互授信,通过 Http Request 的 Header 传递当前用户信息。

  9. 前后端分离:前端将 token 存储在 LocalStorage 或者 Session 中,通过接口获取当前用户的功能权限进行菜单、页面、按钮等控制。数据权限由后端控制,以确定用户可以访问或者操作的数据范围。

写在最后

权限设计将功能权限和数据权限分开管理,保证了权限系统的灵活性和扩展性。通过身份、角色、资源、数据权限和组织结构的关联,实现了对用户权限的细粒度控制。

推荐阅读

支付概念模型设计

License:  CC BY 4.0