# 用户模块业务实现方式（初稿、待更新第二版）

## 用户登录验证
1. 复现现有UAS系统的用户模块，使用相同的密码加盐算法和验证流程，使用相同的token
2. 验证通过后，获取用户对应的部门和岗位信息

## 对数据源执行数据开放策略
- 查看可用数据源列表
    1. 分析者发出查看可用数据源列表的请求后，服务端根据token获取用户的部门、岗位、用户组信息
    2. 对分析者所请求的数据源执行一次权限判断，筛选出分析者有权使用的数据源
    3. 为每个符合条件的数据源获得对应的开放策略（包括行策略和列策略），一并返回前端
    4. 前端提供按钮供分析者查看生效中的数据开放策略
- 查看单个数据源的数据列信息
    1. 分析者发出查看单个数据源的数据列信息请求后，服务端根据token获取用户的部门、岗位、用户组信息
    2. 对分析者所请求的数据源执行一次权限判断流程：
        - 如果分析者不属于开放对象，则直接报错（备注：理论上分析者在前台无法请求自身完全无开放权限的数据源的数据列信息）
        - 如果分析者属于开放对象，则获取对应的`列开放策略`，然后筛选出开放的数据列

## 对图表/看板执行图表/看板分发策略
- 查看图表/看板列表
    1. 阅读者发出查询图表/看板列表的请求后，服务端根据token获取用户的部门、岗位、用户组信息
    2. 对列表中每个图表/看板执行一次权限判断流程，筛选出阅读者有权限访问的图表或看板后返回前端
- 查看单个图表/看板
    1. 阅读者发出查看单个图表/看板的请求后，服务端根据token获取用户的部门、岗位、用户组信息
    2. 对阅读者所请求的单个图表/看板执行一次权限判断流程，如果阅读者无权限访问应当返回403，有权限则进入正常业务流程

## 对看板刷新请求执行数据开放策略
- 分发看板请求刷新数据时应当附带看板作者的用户信息，服务端进行两次判断：
    1. 先以当前阅读者的身份信息判断其是否有该看板的阅读权限
    2. 上一条通过后，对`看板作者`的用户信息执行数据开放权限判断（而不是当前用户的图表阅读权限判断）
- 这种方案可以让看板作者在分发看板时无需考虑阅读者是否有看板内各图表的阅读权限。