---
# System prepended metadata

title: Identity and Access Management PRD

---

**一、概述**

本需求旨在实现用户访问和权限管理的功能。

### 二、用户使用旅程

1. 组织所有者定义并分配组织内的用户角色（组织所有者、管理员、Viewer）。
2. Viewer只能访问组织内选定模型的仪表盘和报告。
3. Owner/admin can invite admin and viewer but viewer only can invite viewers.
4. 组织所有者 and 管理员用户invite viewer, they need assign what model they can have access。
5. Owner and admin 可以访问组织内的所有内容，包括  manage people, org settings, billing, and API keys.
6. Every user by default has a built-in organization using its own user name as org name and he is the owner.
7. Viewer可以邀请用户，但被Viewer邀请进来的用户默认是viewer，需要加入后被管理员/组织所有者分批权限可以看哪些MODEL or viewer request and owner/admin approve。
8. 所有者&管理员邀请用户时，需要先分配用户角色（admin/viewer）；如果是viewer，还要分配哪些MODEL是可以看的。
9. 所有者&管理员可以转换用户role，如果admin可以转换其他人成为admin or viewer，owner可以转换其他人成为 owner，admin or viewer 。
10. Viewer 可以要求 admin/owner permission 来看Model， admin/owner 需要approve 这些request。
11. 可以在Organization 管理里 看每个用户profile。
12. 在Organization 管理里Viewer 可以看People only， admin 可以看 People and APIKey， Owner 可以看 People ， API Key， Billing AND settings。
13. 所有者&管理员可以在 Organization 管理里 manage viewer resources， change roles or delete user.
14. Viewer can leave org or see his own permission , see other memeber public profile and role, can request permission of model and see his current permission on resources.
15. When creating a new org, we need create encryption/decryption key pair for the org. A new table and pair of set/get Restful API should be created to support encryption key service. There is no UI for that. 

### 三、实现逻辑

- 实现逻辑描述：根据用户角色和组织内的模型，限制用户访问和权限。
- 步骤：
    1. 组织所有者定义用户角色。
    2. Viewer只能访问选定模型的仪表盘和报告。
    3. 管理员用户可以访问管理员按钮，以管理所有模型的仪表盘和报告的访问权。
    4. 组织所有者可以访问组织和组织的管理功能。

!![image](https://hackmd.io/_uploads/By_sEFr4T.png)



### 四、相关页面

#### 用户管理（people）页面
- 本页面主要帮助组织所有者完成用户角色的定义和分配，包括组织所有者、管理员和组织用户。
- 页面元素包括：
    - 用户角色选择框，默认值为组织用户，限制条件为组织所有者、管理员和组织用户。
    - 用户分配按钮，点击后将用户分配到相应角色。
    - 用户列表，显示组织内的所有用户和其角色。

#### Resource页面
- 本页面主要帮助组织用户和管理员用户访问选定模型的仪表盘和报告。
- 页面元素包括：
    - 仪表盘列表，显示组织内用户可访问模型的仪表盘的列表，用户点击模型名跳转相应模型的仪表盘页面。
    - 报告列表，显示组织内用户可访问模型的报告的列表，用户点击模型名跳转相应模型的报告页面。

#### Organization页面
- 本页面主要展示用户的组织列表和"New Organization"按钮。
- 组织列表包括已创建或加入的组织。
- 组织图标可点击，点击后进入具体组织的页面。

#### 组织页面
- 本页面展示具体组织的内容和功能。
- 默认展示组织内成员列表，即"People"页面。
- 组织创建者可通过上方的横向tab切换至"Resource"，"Billing"，"Setting"页面。
- 管理员和viewer用户只能切换至"Resource"页面

#### Setting页面
- 本页面包括2个子页面：General和API Key Management。
- General页面包括与GitHub一致的内容（general info & delete organization 按钮）。
![image](https://hackmd.io/_uploads/BJc5Y3SE6.png)


- API Key Management页面包括与OpenAI一致的内容。
 
![Xnip2023-11-17_23-05-12](https://hackmd.io/_uploads/Sk0fY2r4p.jpg)

#### Billing页面
- 本页面包括以下3个子页面：Payment Information，Invoice History，API Key Usage。
- 页面内容与GitHub一致。
![image](https://hackmd.io/_uploads/rJGvFhBVa.png)


### 五、功能详细描述

#### IAM模块
- 本模块的作用是管理用户访问和权限。
- 功能描述：根据用户角色和组织内的模型，限制用户访问和权限。
- 使用步骤：
    1. 组织所有者和管理员在用户管理页面定义用户角色并邀请用户加入，邀请时分配角色/权限。
    2. viewer在用户管理页面邀请viewer用户加入。
    3. 组织所有者和管理员select any viewer and click "edit resource" button to assign viewer可访问的模型" 。
    4. viewer only can edit his owner resource by click "edit resource" button to request 可访问的模型.
    5. 组织所有者和管理员用户can approve those request。
    6. 用户点击用户头像，选择进入组织页面。
    7. 用户从组织列表中点击组织图标，进入具体组织的页面。
   
- 功能点：
    1. 用户角色定义：组织所有者可以定义用户角色为组织所有者、管理员和viewer。
    2. 用户角色分配：组织所有者可以将用户分配到相应的角色。
    3. 仪表盘访问：viewer可以访问选定模型的仪表盘。组织所有者和管理员用户可以访问所有的仪表盘和报告。
    4. 报告访问：viewer可以访问选定模型的报告。组织所有者和管理员用户可以访问所有的仪表盘和报告。
    5. 管理功能：组织所有者和管理员用户可以管理所有模型的仪表盘和报告的访问权限。
    6. 组织页面展示：组织图标可点击，点击后进入具体组织的页面。
    7. 页面切换：组织创建者可通过上方的横向tab切换至"Resource"，"Billing"，"Setting"页面。管理员和viewer用户只能切换至"Resource"页面。
- 异常情况及处理：无
- 涉及字段：用户角色、模型、仪表盘、报告、组织页面
- 、用户

```
**页面结构图**
```



```
**流程图**
```





```
时序图
```




```
类图
```

```
数据字段
```


```
测试用例
```
![Image 11-10-23 at 11.45 PM](https://hackmd.io/_uploads/HyoXZ2nQa.jpg)
![Image 11-10-23 at 11.47 PM](https://hackmd.io/_uploads/ByHs-hnXa.jpg)
![Image 11-10-23 at 11.48 PM](https://hackmd.io/_uploads/SJcJf337p.jpg)




 1、正向测试
| 用例名 | 测试步骤 | 预期结果 | 测试结果 |
| --- | --- | --- | --- |
| 用户角色定义和分配 | 1. 组织所有者或管理员打开用户管理页面<br>2. 选择用户角色，如组织所有者、管理员或组织用户<br>3. 点击用户分配按钮，将用户分配到相应角色<br>4. 查看用户列表，确认用户角色分配成功 | 用户角色分配成功 |  |
| Viewer邀请用户加入 | 1. Viewer打开用户管理页面<br>2. 点击邀请用户加入按钮<br>3. 输入被邀请用户的信息<br>4. 点击发送邀请按钮<br>5. 被邀请用户收到邀请并加入组织 | 用户成功加入组织 |  |
| 管理员分配Viewer可访问的模型 | 1. 管理员打开用户管理页面<br>2. 选择一个Viewer用户<br>3. 点击编辑资源按钮<br>4. 选择可访问的模型<br>5. 点击保存按钮<br>6. 查看该Viewer用户的资源列表，确认资源分配成功 | 资源分配成功 |  |
| Viewer请求可访问的模型 | 1. Viewer打开用户管理页面<br>2. 点击编辑资源按钮<br>3. 选择要请求访问的模型<br>4. 点击请求访问按钮<br>5. 管理员或组织所有者收到请求并审批通过<br>6. 查看该Viewer用户的资源列表，确认资源分配成功 | 资源分配成功 |  |
| 管理员审批资源请求 | 1. 管理员打开用户管理页面<br>2. 点击资源请求列表<br>3. 选择一个请求<br>4. 点击审批通过按钮<br>5. 查看该Viewer用户的资源列表，确认资源分配成功 | 资源分配成功 |  |


 2、逆向测试

| 用例名 | 测试步骤 | 预期结果 | 测试结果 |
| --- | --- | --- | --- |
| 用户角色定义和分配-非法角色 | 1. 组织所有者或管理员打开用户管理页面<br>2. 选择非法的用户角色<br>3. 点击用户分配按钮<br>4. 查看用户列表，确认用户角色分配失败 | 用户角色分配失败，提示错误信息 |  |
| Viewer邀请用户加入-无效信息 | 1. Viewer打开用户管理页面<br>2. 点击邀请用户加入按钮<br>3. 输入无效的被邀请用户信息<br>4. 点击发送邀请按钮<br>5. 查看邀请结果，确认邀请失败 | 邀请失败，提示错误信息 |  |
| 管理员分配Viewer可访问的模型-无效用户 | 1. 管理员打开用户管理页面<br>2. 选择一个无效的Viewer用户<br>3. 点击编辑资源按钮<br>4. 选择可访问的模型<br>5. 点击保存按钮<br>6. 查看资源分配结果，确认资源分配失败 | 资源分配失败，提示错误信息 |  |
| Viewer请求可访问的模型-无效模型 | 1. Viewer打开用户管理页面<br>2. 点击编辑资源按钮<br>3. 选择无效的模型<br>4. 点击请求访问按钮<br>5. 查看资源请求结果，确认请求失败 | 请求失败，提示错误信息 |  |
| 管理员审批资源请求-无效请求 | 1. 管理员打开用户管理页面<br>2. 点击资源请求列表<br>3. 选择一个无效的请求<br>4. 点击审批通过按钮<br>5. 查看资源分配结果，确认资源分配失败 | 资源分配失败，提示错误信息 |  |



3、界面兼容性测试
| 用例名 | 测试步骤 | 预期结果 | 测试结果 |
| --- | --- | --- | --- |
| PC-用户管理页面兼容性测试 | 1. 在PC上打开用户管理页面<br>2. 检查页面布局是否正常显示<br>3. 检查用户角色选择框、用户分配按钮和用户列表等元素是否正常显示 | 页面布局正常显示，元素正常显示 |  |
| PC-资源页面兼容性测试 | 1. 在PC上打开资源页面<br>2. 检查页面布局是否正常显示<br>3. 检查仪表盘列表和报告列表等元素是否正常显示 | 页面布局正常显示，元素正常显示 |  |
| 移动端-用户管理页面兼容性测试 | 1. 在移动设备上打开用户管理页面<br>2. 检查页面布局是否正常显示<br>3. 检查用户角色选择框、用户分配按钮和用户列表等元素是否正常显示 | 页面布局正常显示，元素正常显示 |  |
| 移动端-资源页面兼容性测试 | 1. 在移动设备上打开资源页面<br>2. 检查页面布局是否正常显示<br>3. 检查仪表盘列表和报告列表等元素是否正常显示 | 页面布局正常显示，元素正





