2 分钟
权限管理系统设计
权限系统需求
- 对权限实体的增删改查
- 对某权限实体下下的用户的增删改查(主动赋权、移除权限)
- 灵活通知机制(email、微信、钉钉、飞书等)
- 自定义审批规则
- 用户组
- 权限组
权限抽象
权限系统需要回答的问题是:某用户对某实体是否有权限。
分析此问题,可以得到三个实体:
用户
实体
有无权限
(二值选项、属性)
很明显这是一个多对多的关系
为了更加具象,根据现实,将 实体
可以再细分为三个层级
- 应用(租户)
- 资源
- 权限
此时问题变为:用户在 某应用的 某资源的 某种权限的 值是什么?
而权限组合用户组是这个核心问题的一个扩展。
权限-用户之间除了是否拥有的属性之外,还可能包含有效期。
用户抽象
用户在权限系统中可以分为如下类别:
- 应用开发者
- 应用管理员
- 资源管理员
- 普通用户
应用开发者
应用开发者是一类特殊的用户,不会对应真实的人类个体,是第三方系统接入权限系统的抽象用户。
应用开发者具有应用管理员、资源管理员的全部权限和功能。这些功能的使用只能通过程序间远程调用实现(比如RESTful API或者各种RPC)。用户凭证为APP_ID和APP_SECRET
应用管理员
应用管理员有权限执行如下操作
- 为某应用创建/删除/修改/查看资源
- 为某应用创建/删除/修改/查看应用管理员
- 为某应用的资源添加/删除/修改/查看其对应的资源管理员
资源管理员
- 为某资源创建/删除/查看权限
- 为某资源某权限下添加/删除/查看用户
普通用户
其他类型用户则为普通用户
模块设计
一共分为如下模块
- 核心Service模块
- web API
- 管理页面
- 权限申请页面
- 权限审批页面
- open API 或者 RPC服务
核心Service模块
- 提供核心功能支持
- 实现基本业务逻辑
- 实现通知
web API
提供管理页面、权限申请页面、权限审批页面http api
open API 或者 RPC服务
实现第三方服务接入的能力