# deprecated
# OneID & Noah

## 需求

OneID将作为用户管理系统集成进Noah。
管理界面、功能与钉钉相仿，面板可分为三个模块：

- 部门
    - 部门具有层级从属关系，一个部门只有一个上级部门，可能有0至多个下级部门。  
    - 每个人可属于多个部门。  
    - 子部门、成员在部门中有序排列。  
    - 面向所有内部联系人。
- 角色
    - 可划分多个角色组，角色组下可创建多个角色。每个人可拥有多个角色。  
    - 面向所有内部联系人。
- 外部联系人
    - 内、外联系人完全隔离。
    - 可划分多个标签组，标签组下可任意创建多个标签。每个人可拥有多个标签。
    - 可同时选多个标签，作为多个筛选项。  **TODO**

另外还有以下类组的需求:

- 子管理员
    - 无层级结构，每个人可属于0-N个子管理员身份。


## 解决方案
### 部门 <--> Dept
可直接使用。
已存在一个名(uid)为`root`的部门，其子节点视为公司，公司的子节点为部门。目前认为`root`下只有一个子节点，即只有一个公司。

### 角色 <--> Group
已存在一个名(uid)为`root`的组，作为将来所有组的根组。

在`root`下创建一个名为`intra`的组。 [root -> intra]  

所有角色组为属于`intra`的子组，不接受用户作为成员。 [root -> intra -> role_group]  

而角色作为角色组的子组。 [root -> intra -> role_group -> role]

用户加入某组即拥有该角色。

### 外部联系人 <--> Group
在`root`下创建一个名为`extern`的组。 [root -> extern]
所有标签组为属于`extern`的子组，不接受用户作为成员。 [root -> extern -> label_group]
而标签作为标签组的子组 [root -> extern -> label_group -> label]
用户加入某组即拥有该标签。

Noah层面，外部联系人不应加入任何一个部门，不应加入任何一个角色。但OneID层面不会做限制。

### 子管理员组 <--> Group
在`root`下创建一个名为`manager`的组。 [root -> manager]
所有子管理员组均为`manager`的子组。再无更深层级。

## 注意事项
不属于`root`下的部门将无法在部门页面中被展示。  
不属于`intra`下的角色组、角色将无法在角色页面中被展示。  
不属于`extern`下的标签组、标签将无法在外部联系人页面中被展示。   
