Skip to content

Commit

Permalink
Auto commit: 2024-07-05 15:04:14
Browse files Browse the repository at this point in the history
  • Loading branch information
samlau7245 committed Jul 5, 2024
1 parent e00b3fa commit 31c292c
Showing 1 changed file with 136 additions and 0 deletions.
136 changes: 136 additions & 0 deletions docs/pm_coding/saas.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,140 @@
3. 系统功能设计
```

```txt
为了实现这种多租户SAAS模式,其中每个租户(例如,每个学校)包含一个总部和多个门店(校区),我们需要对系统进行进一步的细化设计,使得总部能够控制全局数据,而每个门店可以独立运作。以下是一个详细的设计方案:
### 1. 角色与权限设计
#### 1.1 角色描述
- **总部管理员(Headquarters Admin)**:
- 管理整个租户的全局数据,包括所有门店(校区)的数据。
- 拥有对整个租户的数据和用户的管理权限。
- **门店管理员(Store Admin)**:
- 管理所在门店(校区)的数据和用户。
- 不可访问其他门店(校区)的数据。
- **老师(Teacher)**:
- 管理自己所在门店的课程和排课数据。
- 如果老师被配置在多个门店上课,可以切换管理的门店。
#### 1.2 权限控制
通过RBAC(基于角色的访问控制)实现权限控制,并在数据库中记录用户与门店(校区)的关联关系。
### 2. 数据库设计
#### 2.1 核心实体
- **Tenant(租户)**:表示一个学校。
- **Headquarters(总部)**:表示租户的总部。
- **Store(门店/校区)**:表示一个租户的门店或校区。
- **User(用户)**:包括总部管理员、门店管理员和老师。
- **Role(角色)**:表示用户的角色。
- **Course(课程)**:表示课程信息。
- **Schedule(排课)**:表示课程的时间安排。
#### 2.2 数据库表设计
- `Tenant` 表:
- `tenant_id`(租户ID)
- `tenant_name`(租户名称)
- `Headquarters` 表:
- `hq_id`(总部ID)
- `tenant_id`(租户ID)
- `hq_name`(总部名称)
- `Store` 表:
- `store_id`(门店ID)
- `tenant_id`(租户ID)
- `store_name`(门店名称)
- `User` 表:
- `user_id`(用户ID)
- `username`(用户名)
- `password`(密码)
- `role`(角色,如Headquarters Admin, Store Admin, Teacher)
- `UserStore` 表:
- `user_store_id`(主键)
- `user_id`(用户ID)
- `store_id`(门店ID)
- `Course` 表:
- `course_id`(课程ID)
- `tenant_id`(租户ID)
- `course_name`(课程名称)
- `Schedule` 表:
- `schedule_id`(排课ID)
- `course_id`(课程ID)
- `teacher_id`(老师ID)
- `start_time`(开始时间)
- `end_time`(结束时间)
### 3. 系统功能设计
#### 3.1 登录与角色识别
- 用户登录后,系统根据用户角色字段判断其身份。
- 如果是总部管理员,展示全局数据和门店数据的选择界面。
- 如果是门店管理员或老师,展示其有权限的门店列表,允许选择并切换门店。
#### 3.2 总部管理员功能
- **全局数据管理**:总部管理员可以查看和管理整个租户的所有数据,包括所有门店的数据。
- **门店数据管理**:总部管理员可以选择某个具体门店进行管理,类似于门店管理员的权限。
#### 3.3 门店管理员功能
- **门店数据管理**:门店管理员可以查看和管理自己所在门店的数据和用户。
- **用户管理**:门店管理员可以创建和管理门店内的老师账号。
#### 3.4 老师功能
- **门店选择与切换**:老师登录后,系统展示其有权限管理的门店列表,允许选择门店进行管理。
- **数据管理**:老师可以查看和管理自己所选择门店的相关数据,如课程、排课等。
### 4. 前端界面设计
#### 4.1 登录界面
- 提供用户名和密码的输入框。
- 根据登录成功后的角色字段跳转到相应的主界面。
#### 4.2 总部管理员主界面
- **选择界面**:展示全局数据管理和具体门店数据管理的选项。
- **全局数据管理界面**:展示全租户范围的数据和操作功能。
- **具体门店数据管理界面**:展示选择的门店数据和操作功能。
#### 4.3 门店管理员主界面
- **门店数据管理界面**:展示当前门店的数据和操作功能。
#### 4.4 老师主界面
- **门店选择界面**:展示老师有权限管理的门店列表,允许选择和切换门店。
- **门店数据管理界面**:展示当前选择门店的数据和操作功能。
### 5. 安全与权限验证
- **数据访问控制**:在每次数据访问时,验证用户的权限,确保用户只能访问和操作自己有权限的门店数据。
- **日志记录**:记录用户的操作日志,便于审计和追踪。
### 6. API设计
#### 6.1 登录接口
- **POST /api/login**
- 请求参数:`username`,`password`
- 返回数据:用户信息及角色
#### 6.2 获取门店列表接口
- **GET /api/stores**
- 请求参数:`user_id`
- 返回数据:用户有权限的门店列表
#### 6.3 数据管理接口
- **GET /api/data**
- 请求参数:`user_id`,`store_id`
- 返回数据:门店相关数据
- **POST /api/data**
- 请求参数:`user_id`,`store_id`,数据操作参数
- 返回数据:操作结果
通过以上设计,可以确保总部管理员和门店管理员能够根据其角色和权限有效地管理全局或具体门店的数据,并且老师能够灵活地在不同门店之间进行切换和操作。
```

0 comments on commit 31c292c

Please sign in to comment.