目录
用户、角色、权限
三者间的关系
权限Permission
新增一个应用时
新增一个命名空间时
角色Role
新增一个应用时
新增一个命名空间时
第三方应用
apollo也采用经典的三层权限设计,用户关联角色,角色关联权限,表信息如下
数据库 | 表名 | 描述 |
ApolloPortalDB | Users | 用户表 |
ApolloPortalDB | UserRole | 用户与角色关联表 |
ApolloPortalDB | Role | 角色表 |
ApolloPortalDB | RolePermission | 角色与权限关联表 |
ApolloPortalDB | Permission | 权限表 |
查询用户拥有的权限SQL如下:
SELECT
t.Username,
t1.RoleId,
t2.RoleName,
t3.PermissionId,
t4.PermissionType,
t4.TargetId
FROM
ApolloPortalDB.Users t,
ApolloPortalDB.UserRole t1,
ApolloPortalDB.Role t2,
ApolloPortalDB.RolePermission t3,
ApolloPortalDB.Permission t4
WHERE
t.Username = t1.UserId
AND t1.RoleId = t2.Id
AND t2.Id = t3.RoleId
AND t3.PermissionId = t4.Id
AND t1.IsDeleted = '0'
AND t2.IsDeleted = '0'
AND t3.IsDeleted = '0'
AND t4.IsDeleted = '0'
Permission表对应的表结构如下
其中比较重要的是PermissionType、TargetId字段,其他字段都是apollo表设计时的通用字段。PermissionType类型如下
权限类型 | 权限描述 | 举例 |
CreateApplication | “在系统参数 role.create-application.enabled=true 时,会限制只有超级管理员和拥有创建应用权限的帐号可以创建应用”----该权限指的就是此处的创建应用权限,只用在 role.create-application.enabled=true条件下意义 |
|
ManageAppMaster | ”在系统参数 role.manage-app-master.enabled=true 会限制只有超级管理员和拥有管理员分配权限的帐号可以修改应用管理员”----该权限指的就是此处的管理员分配权限,只在role.manage-app-master.enabled=true条件下有意义 |
|
AssignRole | 对TargetId字段指定的应用: 1、指定应用管理员权限 2、修改应用信息的权限 3、命名空间指定拥有修改权限、发布权限的用户的分配权限 |
|
CreateCluster | 对TargetId字段指定应用的创建集群的权限 |
|
CreateNamespace | 对TargetId字段指定应用的创建命名空间的权限 |
|
ModifyNamespace | 对TargetId字段指定应用指定环境指定命名空间的修改权限(可见命名空间的修改权限是区分环境,但是不区分集群) |
当TargetId=4am+application+DEV时 表示对应用4am的DEV环境的application命名空间的修改权限 |
ReleaseNamespace | 对TargetId字段指定应用指定环境指定命名空间的发布权限(可见命名空间的发布权限是区分环境,但是不区分集群) |
当TargetId=4am+application+DEV时 表示对应用4am的DEV环境的application命名空间的发布权限 |
权限类型只有以上固定的7种,但权限是随着应用和命名空间的增加而增加
新增应用信贷系统XDXT时,系统会自动在Permission表会新增如下权限
分别代表对应用XDXT的分配角色权限、创建集群权限、创建命名空间权限、分配管理员权限( role.manage-app-master.enabled=true )
在应用信贷系统XDXT下新增命名空间interfaceList时,系统会自动在Permission表会新增如下权限
分别代表对命名空间interfaceList的在SIT环境、DEV环境、及默认环境的修改和发布权限
表结构如下,除了RoleName,其它均是apollo通用的表结构字段。
由于角色和权限基本上是一对一的,角色名称RoleName字段的取值几乎都采用了对应权限的PermissionType值与TargetId值的组合,大致分类如下几类
角色 | 角色与权限比 | 对应权限 | 描述 |
Master+应用id | 1:3 | PermissionType:CreateCluster TargetId:应用id |
应用管理员角色,对应3个权限,具体权限功能参见权限描述。 |
PermissionType:reateNamespace TargetId:应用id |
|||
PermissionType:AssignRole TargetId:应用id |
|||
ManageAppMaster+应用id | 1:1 | PermissionType:ManageAppMaster TargetId:应用id |
分配管理员角色,对应1个权限,具体权限功能参见权限描述。 |
ModifyNamespace+应用id+Namespace+环境 | 1:1 | PermissionType:ModifyNamespace TargetId:应用id + Namespace+环境 |
命名空间修改角色,对应1个权限,具体权限功能参见权限描述。 |
ReleaseNamespace+应用id+Namespace+环境 | 1:1 | PermissionType:ReleaseNamespace TargetId:应用id + Namespace+环境 |
命名空间发布角色,对应1个权限,具体权限功能参见权限描述。 |
CreateApplication+SystemRole | 1:1 | PermissionType:CreateApplication |
创建应用角色,对应1个权限,具体权限功能参见权限描述。 |
新增应用信贷系统XDXT时,系统会自动在Role表会新增如下角色
并将Master+NDXT角色赋给应用管理员用户
在应用信贷系统XDXT下新增命名空间interfaceList时,系统会自动在Role表会新增如下角色
因为存在俩个环境DEV、SIT,所以对应6个角色,并将默认环境角色赋给应用管理员用户
作为Apollo开放平台访问的授权主体,第三方应用与用户共享同一份角色、权限体系。第三方应用关联角色,角色关联权限,表信息如下
数据库 | 表名 | 描述 |
ApolloPortalDB | Consumer | 第三方应用 |
ApolloPortalDB | ConsumerRole | 第三方应用与角色关联表 |
ApolloPortalDB | Role | 角色表 |
ApolloPortalDB | RolePermission | 角色与权限关联表 |
ApolloPortalDB | Permission | 权限表 |
查询第三方应用拥有的权限SQL如下:
SELECT
t.AppId,
t1.RoleId,
t2.RoleName,
t3.PermissionId,
t4.PermissionType,
t4.TargetId
FROM
Consumer t,
ConsumerRole t1,
Role t2,
RolePermission t3,
Permission t4
WHERE
t.Id = t1.ConsumerId
AND t1.RoleId = t2.Id
AND t2.Id = t3.RoleId
AND t3.PermissionId = t4.Id
and t1.IsDeleted='0'
and t2.IsDeleted='0'
and t3.IsDeleted='0'
and t4.IsDeleted='0'
角色role、权限Permission描述见上部分内容。