权限系统需求

  • 对权限实体的增删改查
  • 对某权限实体下下的用户的增删改查(主动赋权、移除权限)
  • 灵活通知机制(email、微信、钉钉、飞书等)
  • 自定义审批规则
  • 用户组
  • 权限组

权限抽象

权限系统需要回答的问题是:某用户对某实体是否有权限。

分析此问题,可以得到三个实体:

  • 用户
  • 实体
  • 有无权限(二值选项、属性)

很明显这是一个多对多的关系

为了更加具象,根据现实,将 实体 可以再细分为三个层级

  • 应用(租户)
  • 资源
  • 权限

此时问题变为:用户在 某应用的 某资源的 某种权限的 值是什么?

而权限组合用户组是这个核心问题的一个扩展。

权限-用户之间除了是否拥有的属性之外,还可能包含有效期。

用户抽象

用户在权限系统中可以分为如下类别:

  • 应用开发者
  • 应用管理员
  • 资源管理员
  • 普通用户

应用开发者

应用开发者是一类特殊的用户,不会对应真实的人类个体,是第三方系统接入权限系统的抽象用户。

应用开发者具有应用管理员、资源管理员的全部权限和功能。这些功能的使用只能通过程序间远程调用实现(比如RESTful API或者各种RPC)。用户凭证为APP_ID和APP_SECRET

应用管理员

应用管理员有权限执行如下操作

  • 为某应用创建/删除/修改/查看资源
  • 为某应用创建/删除/修改/查看应用管理员
  • 为某应用的资源添加/删除/修改/查看其对应的资源管理员

资源管理员

  • 为某资源创建/删除/查看权限
  • 为某资源某权限下添加/删除/查看用户

普通用户

其他类型用户则为普通用户

模块设计

一共分为如下模块

  • 核心Service模块
  • web API
  • 管理页面
  • 权限申请页面
  • 权限审批页面
  • open API 或者 RPC服务

核心Service模块

  • 提供核心功能支持
  • 实现基本业务逻辑
  • 实现通知

web API

提供管理页面、权限申请页面、权限审批页面http api

open API 或者 RPC服务

实现第三方服务接入的能力