1. 认证和授权流程
认证和授权需要一个第三方用户管理中心,该管理中心的功能包含以下几点:
- 提供用户注册和管理。
- 提供tenant、namespace、topic的创建和管理。
- 提供用户信息和权限的验证接口。
当新增一个业务时,需要创建对应的用户,然后使用该用户创建tenant、namespace和topic。然后客户端可以携带用户名/密码连接到broker,broker到管理中心验证用户是否有效,拉取用户的权限并保存到本地,之后对客户端的操作进行权限的验证。
整体流程:

上述设计的核心是把tenant、namespace、topic的看作一种资源,消息的发布和订阅看作是对资源的使用,认证和授权的方案设计就可以分成两部分:
- 对资源的管理权限
- 对资源的使用权限
其中,对资源的管理权限可以由用户中心去做,可以创建用户,给用户分配资源和使用权限,同时也可以给用户创建子用户,给子用户分配主用户权限下的资源等。用户中心的输出就是<角色,权限>的集合,把这个集合提供给broker,这样broker就可以根据这个集合判断用户的操作是否合法。
2. 数据表设计
| 表名 |
含义 |
功能 |
备注 |
| sys_user_info |
用户信息表 |
配置用户信息 |
|
| sys_service_group |
业务分组表 |
用户属于某一个业务 |
|
| sys_role |
角色表 |
用角色进行权限的控制 |
|
| sys_user_role_map |
用户和角色关系表 |
用户和角色之间的关系,一个用户可能属于多个角色 |
|
| res_cluster |
集群表 |
配置ADMQ集群信息,包含名称、地址等 |
|
| res_tenant |
租户表 |
配置集群下的租户信息 |
|
| res_namespace |
命名空间表 |
配置租户下的namespace信息 |
|
| res_topic |
topic表 |
配置namespace下的topic信息 |
|
| sys_role_res |
角色和资源权限关系表 |
配置角色和资源之间的关系和对应的权限 |
|
| sys_authority |
权限配置表 |
配置资源权限字典 |
|
2.1 用户信息表
| 名称 |
含义 |
类型 |
备注 |
| id |
用户ID |
bigint(20) |
主键递增 |
| username |
用户名称 |
varchar(128) |
|
| nick |
昵称 |
varchar(128) |
|
| passwd |
用户密码 |
varchar(128) |
加密后 |
| service_group |
业务分组 |
bigint(20) |
|
| add_time |
添加时间 |
bigint(20) |
|
| update_time |
修改时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
2.2 业务分组表
| 名称 |
含义 |
类型 |
备注 |
| id |
组ID |
bigint(20) |
主键递增 |
| group_name |
分组名称 |
varchar(128) |
|
| add_time |
添加时间 |
bigint(20) |
|
| update_time |
修改时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
2.3 角色表
| 名称 |
含义 |
类型 |
备注 |
| id |
组ID |
bigint(20) |
主键递增 |
| role_name |
角色名称 |
varchar(128) |
|
| add_time |
添加时间 |
bigint(20) |
|
| update_time |
修改时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
2.4 用户和角色关系表
| 名称 |
含义 |
类型 |
备注 |
| user_id |
用户id |
bigint(20) |
|
| role_id |
角色id |
bigint(20) |
|
| add_time |
添加时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
1.5 集群表
| 名称 |
含义 |
类型 |
备注 |
| id |
组ID |
bigint(20) |
主键递增 |
| name |
集群名称 |
varchar(128) |
|
| address |
集群地址 |
varchar(128) |
|
| add_time |
添加时间 |
bigint(20) |
|
| update_time |
修改时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
1.6 租户表
| 名称 |
含义 |
类型 |
备注 |
| id |
组ID |
bigint(20) |
主键递增 |
| clusters |
所属集群 |
varchar(128) |
可以属于多个集群 |
| name |
名称 |
varchar(128) |
|
| is_valid |
是否有效 |
int(2) |
1:有效,2:无效 |
| add_time |
添加时间 |
bigint(20) |
|
| update_time |
修改时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
1.7 命名空间表
| 名称 |
含义 |
类型 |
备注 |
| id |
组ID |
bigint(20) |
主键递增 |
| tenant |
租户ID |
bigint(20) |
|
| name |
名称 |
varchar(128) |
|
| is_valid |
是否有效 |
int(2) |
1:有效,2:无效 |
| add_time |
添加时间 |
bigint(20) |
|
| update_time |
修改时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
1.8 topic表
| 名称 |
含义 |
类型 |
备注 |
| id |
组ID |
bigint(20) |
主键递增 |
| tenant |
租户ID |
bigint(20) |
|
| namespace |
命名空间ID |
bigint(20) |
|
| name |
名称 |
varchar(128) |
|
| is_valid |
是否有效 |
int(2) |
1:有效,2:无效 |
| add_time |
添加时间 |
bigint(20) |
|
| update_time |
修改时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
1.9 角色和资源权限关系表
| 名称 |
含义 |
类型 |
备注 |
| role_id |
角色ID |
bigint(20) |
|
| res_type |
资源类型 |
int(11) |
1:cluster2:tenant3:namespace4:topic |
| res_id |
资源ID |
bigint(20) |
|
| authorities |
权限列表 |
varchar(128) |
逗号隔开 |
| add_time |
添加时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
|
|
|
|
|
|
|
|
1.10 权限配置表
| 名称 |
含义 |
类型 |
备注 |
| id |
主键 |
int(11) |
|
| desc |
权限描述 |
varchar(256) |
|
| add_time |
添加时间 |
bigint(20) |
|
| remark |
备注信息 |
varchar(256) |
|
|
|
|
|
|
|
|
|
目前支持的几种权限:
| ID |
含义 |
备注 |
| 100 |
创建tenant |
|
| 101 |
删除tenant |
|
| 102 |
tenant下所有topic的写权限 |
|
| 103 |
tenant下所有topic的读权限 |
|
|
|
|
| 200 |
创建namespace |
|
| 201 |
删除namespace |
|
| 202 |
namespace下所有topic的写权限 |
|
| 203 |
namespace下所有topic的读权限 |
|
|
|
|
| 300 |
创建topic |
|
| 301 |
删除topic |
|
| 302 |
topic的写权限 |
|
| 303 |
topic的读权限 |
|