用户体系建设
本文主要描述用户的分类及用户使用场景。
用户分类
共工轻应用体系下,用户的体系搭建是区分平台用户、终端用户区分的。平台用户拥有平台的创建应用和搭建应用权限,他是应用的创建者和维护者。 终端用户多半是用户的使用者,进来后直接使用。
组织架构
组织架构是我们用来管理和维护系统用户的,无论是外部用户,还是一个内部用户,我们这边是统一进行应用侧的角色管理的。
根据不同的用户角色来控制他不同的行为,包括 应用权限(应用列表),操作权限(创建、发布相关),数据权限等。
使用场景
编辑场景
这种情况是登录到共工平台,通常使用 “平台用户” 登录,然后编辑维护或者发布应用 根据不同的角色来管理用户的不周能力。通常情况下,编辑都是不通查看应用数据的,所以这里只和过去共工的编辑态是相等的。
终端场景
这是一个终端用户使用的的情况,他是一个普通用户,进入后,没有编辑能力,只有使用能力,打开每个 APP 就橡打开 一个个不同应用一样。 当然该类用户也有 APP 分配权限的,不同的用户对 APP 的权限是有开放的。
集成场景
集成是在一个应用发布后,以应用链接的方式来提供,三方来集成。这种情况下,需要对接三方用户或直接以指定 用户的情况下跳转进本应用中。
登录场景
关于用户登录类型的结论说明,共分为 4 种情况
- 免登录
- 关闭权限情况 ,应用访问不受控制,直接打开,应用没有用户信息的场景,后台会默认给到默认 token
- 平台用户登录
- 应用与组织架构共享用户体系 ,应用的 session 与平台保持一致。过期会自动跳转平台登录。
- 第三方登录
- 三方登录场景,三方没有 SSO,只有登录页和对应的后台登录逻辑 , 这种场景指定用户登录页,同时,通过扩展 “业务连接器” 获取三方接口验证等能力,扩展脚本实现验证。
- SSO 登录
- 支持 SSO 列表配置,这里目前支持 uc ,idaas sso 的 auth2 协议
权限体系分层
三方登录过程
开放扩展接口
自定义登陆接口
说明:自定义登陆接口
请求方式:POST
请求参数
名称 | 上级 | 类型 | 必选 | 中文名 | 说明 |
---|---|---|---|---|---|
username | String | 是 | 用户名 | 用户名 | |
password | String | 是 | 密码 | 密码 | |
uuid | String | 否 | 验证码对应唯一标识 | 如果要自定义自己校验验证码,可以接收此参数,是验证码的唯一标识 | |
code | String | 否 | 验证码 | 如果要自定义自己校验验证码,可以接收此参数,是用户输入的验证码结果 |
{
<strong>"username"</strong>:<strong>"admin"</strong>,
<strong>"password"</strong>:<strong>"1234@qweR"</strong>,
<strong>"code"</strong>:<strong>"0"</strong>,
<strong>"uuid"</strong>:<strong>"a4251f69102d482da0166d5e3efa8f02"</strong>
}
返回数据
名称 | 上级 | 类型 | 必选 | 中文名 | 说明 |
---|---|---|---|---|---|
status | Number | 是 | 请求执行状态 | 成功 200 | |
message | String | 否 | 消息 | 异常信息 | |
success | Boolean | 是 | 是否请求成功 | ||
data | Object | 是 | 返回数据 | ||
access_token | data | String | 否 | token | 用户登陆成功 token,如果第三方没有生成 token,可不返回,共工则会以自己规则生成一个存储;如果返回了,则使用返回的 token |
expires_in | data | Number | 否 | 失效时间 | token 失效时间 |
userId | data | Number | 是 | 用户 ID | |
username | data | String | 是 | 用户名 | |
fullName | data | String | 是 | 名称 | |
phoneNumber | data | String | 否 | 手机号 | |
data | String | 否 | 邮件 |
{
<strong>"status"</strong>:<strong>200</strong>,
<strong>"message"</strong>:<strong>null</strong>,
<strong>"data"</strong>:{
<strong>"gonggongLastModifier"</strong>:<strong>1</strong>,
<strong>"fullName"</strong>:<strong>"系统管理员"</strong>,
<strong>"gonggongAppId"</strong>:<strong>2745681943545280</strong>,
<strong>"gonggongCreateTime"</strong>:<strong>"2023-11-08T15:17:22"</strong>,
<strong>"userId"</strong>:<strong>1</strong>,
<strong>"gonggongTenantId"</strong>:<strong>2745676244207040</strong>,
<strong>"gonggongLastModifiedTime"</strong>:<strong>"2023-11-12T17:13:42"</strong>,
<strong>"gonggongId"</strong>:<strong>1</strong>,
<strong>"phoneNumber"</strong>:<strong>"12300001111"</strong>,
<strong>"gonggongCreator"</strong>:<strong>1</strong>,
<strong>"name"</strong>:<strong>"admin"</strong>,
<strong>"username"</strong>:<strong>"admin"</strong>
},
<strong>"success"</strong>:<strong>true</strong>
}
自定义权限信息接口
请求方式:GET
请求头
名称 | 上级 | 类型 | 必选 | 中文名 | 说明 |
---|---|---|---|---|---|
Authorization | String | 是 | 用户 token | 用户名 | |
{authTag} | String | 否 | 用户 token | {authTag}为用户在共工配置的 key |
请求参数
可在配置接口 url 时自行执行,可以使用 ${}占位符,参数池为【自定义登陆接口】的返回信息,如下
/external/permission?userId=${userId}
--> /external/permission?userId=1
返回数据
除了菜单信息 authMenuList,其他组织/角色/当前组织/当前角色均可不返回,试项目情况自己是否需要
名称 | 上级 | 类型 | 必选 | 中文名 | 说明 |
---|---|---|---|---|---|
status | Number | 是 | 请求执行状态 | 成功 200 | |
message | String | 否 | 消息 | 异常信息 | |
success | Boolean | 是 | 是否请求成功 | ||
data | Object | 是 | 返回数据 | ||
authMenuList | data | Object[] | 是 | 菜单 | |
resourceId | authMenuList | Number | 是 | 菜单资源 ID | |
name | authMenuList | 否 | 菜单名称 | ||
permissionPointList | authMenuList | Object[] | 否 | ||
permissionPoint | permissionPointList | String | 是 | 权限点 | 菜单上的权限点,可以是一个按钮,或其他任何一个表示是否含有此权限的一个标识 |
name | permissionPointList | String | 否 | 权限点名称 | |
organizationList | data | Object[] | 否 | ||
id | organizationList | Number | 是 | 部门 ID | |
orgName | organizationList | String | 是 | 部门名称 | |
orgCode | organizationList | String | 是 | 部门编号 | |
orgPath | organizationList | String | 否 | 部门路径 | |
parentId | organizationList | Number | 否 | 上级部门 Id | |
parentName | organizationList | String | 否 | 上级部门名称 | |
level | organizationList | Number | 否 | 层级 | |
headId | organizationList | Number | 否 | 部门负责人 Id | |
headName | organizationList | String | 否 | 部门负责人名称 | |
roleIds | organizationList | String | 否 | 关联的角色 Id,用逗号隔开 | |
roleNames | organizationList | String | 否 | 关联的角色名称,用逗号隔开 | |
phone | organizationList | String | 否 | 电话 | |
organizationList | String | 否 | 邮箱 | ||
remark | organizationList | String | 否 | 备注 | |
roleList | data | Object[] | 否 | ||
id | roleList | Number | 是 | 角色 id | |
roleCode | roleList | String | 是 | 角色编码 | |
roleName | roleList | String | 是 | 角色名称 | |
description | roleList | String | 否 | 描述 | |
status | roleList | Number | 是 | 角色状态 | 1-启用 0-停用 |
currentOrganizations | data | Object[] | 否 | 当前登陆人所属的部门 | |
id | organizationList | Number | 是 | 部门 ID | |
orgName | organizationList | String | 是 | 部门名称 | |
orgCode | organizationList | String | 是 | 部门编号 | |
orgPath | organizationList | String | 否 | 部门路径 | |
parentId | organizationList | Number | 否 | 上级部门 Id | |
parentName | organizationList | String | 否 | 上级部门名称 | |
level | organizationList | Number | 否 | 层级 | |
headId | organizationList | Number | 否 | 部门负责人 Id | |
headName | organizationList | String | 否 | 部门负责人名称 | |
roleIds | organizationList | String | 否 | 关联的角色 Id,用逗号隔开 | |
roleNames | organizationList | String | 否 | 关联的角色名称,用逗号隔开 | |
phone | organizationList | String | 否 | 电话 | |
organizationList | String | 否 | 邮箱 | ||
remark | organizationList | String | 否 | 备注 | |
currentRoles | data | Object[] | 否 | 当前登陆人拥有的角色 | |
id | roleList | Number | 是 | 角色 id | |
roleCode | roleList | String | 是 | 角色编码 | |
roleName | roleList | String | 是 | 角色名称 | |
description | roleList | String | 否 | 描述 | |
status | roleList | Number | 是 | 角色状态 | 1-启用 0-停用 |
说明
平台用户和终端用户关系是什么?
平台用户对标过老共工平台用户,即搭建应用的用户,而终端用户是访问使用应用运行时的用户。
两者间是可以相互打通的,即平台用户偏运维工作,一般不会使用应用,特殊情况除外。
即平台用户是终端用户的一种。
需要保留 2 套用户体系吗?
- 在工程上,业务的用户体系是复杂度远远大于平台用户,即是包含关系,我们认为可以共用一套用户体系。
不同用户会看到不一样菜单与入口吗?
- 可以的,这部分通过组织架构的角色部分,实现不同的路由主页(前端实现不同的跳转)。