13 KiB
13 KiB
项目管理模块 - RMDC-project-management
- 单个k8s-namespace作为一个项目
- 本模块是rmdc项目的核心模块
项目权限
- 项目的权限颗粒度
- 查看权限
- 用户可以查看自己拥有权限的所有项目的列表
- 超级管理员能够查看全部内容
- 数据权限,分配权限需要精细到项目详情的特定模块
- 新建(创建)权限
- 只有超级管理员可以创建项目信息填写工单
- 修改(编辑)权限
- 项目详情填写人,自动具备修改权限
- 由于有工单系统
- 用户不能直接修改项目信息,只能发起修改工单
- 具备查看权限的用户具备修改权限
- 超级管理员可以查看全部项目信息,具备修改权限
- 删除权限
- 非超级管理员用户不具备删除权限
- 导出权限
- 具有查看权限的用户可以导出项目信息
- 查看权限
- 项目创建权限
- 项目创建只能由超级管理员进行
- 项目有唯一字段(项目名称 namespace命名空间),需要判定数据库是否存在该项目
- 用户/管理
- 用户端能够查看部分内容
- 超级管理员能够查看全部内容
- 管理员能够查看部分内容
- 管理员可以授权自己拥有权限的内容给普通用户
- 访问控制列表(ACL)由管理员授权,遵循项目的颗粒度进行授权
项目权限管理分配页面
- 只有超级管理员可以访问
- 后端接口只有超级管理员具备权限
- 权限检验
- 审计日志记录
- 超级管理员可以为特定用户分配项目权限
- 分配权限只有查看权限,编辑权限(通过工单系统审批)
- 分配权限可以按照项目颗粒度进行分配
- 分配权限可以按照用户颗粒度进行分配
- 分配权限需要精细到 项目详情的特定模块(数据权限)
- 项目基本信息模块
- 部署业务模块
- 部署环境模块
- 部署中间件模块
- 项目授权模块(只有超级管理员具备权限)
- 用户系统使用 rmdc-user-auth 的用户系统
- 权限分配管理 使用 rmdc-user-auth 模块
- 权限分配需要记录审计日志
- 审计日志使用 rmdc-audit-log 模块
项目管理的生命周期
- 项目创建
- 超级管理员填写项目基本信息,分派给项目填写人
- 项目处于 未发布状态(草稿状态)
- 项目填写人填写项目信息
- 项目填写人提交项目信息给超级管理员审核
- 超级管理员审核项目信息
- 超级管理员审批通过之后
- 项目信息作为master主分支
- 项目处于已发布状态
- 超级管理员填写项目基本信息,分派给项目填写人
- 项目编辑
- 非超级管理员用户可以编辑项目信息
- 非超级管理员用户可以发起修改工单
- 项目对于 非超级管理员用户 处于编辑状态
- 非超级管理员用户可以在超级管理员审批之前 撤销修改工单
- 项目对于 非超级管理员用户 处于已发布状态
- 超级管理员审批通过之后
- 项目对于 非超级管理员用户 处于已发布状态
- 超级管理员审批拒绝之后
- 项目对于 非超级管理员用户 处于编辑状态
- 项目删除
- 只有超级管理员 可以修改项目状态为删除状态
- 项目采用软删除的策略
项目详情页面与项目详情工单之间的关系
- 项目详情工单分为如下的两种
- 项目创建时候,项目详情的填写工单
- 项目正常过程中,项目详情的编辑工单
- 项目详情工单和项目详情页面之间需要互相能够跳转
- 项目详情填写工单是唯一的,只能同时存在一个项目详情填写工单
- 超级管理员的项目详情编辑工单不是唯一的,可以同时存在多个项目详情编辑工单
- 对于非超级管理员,项目详情编辑工单是唯一的,只能同时存在一个项目详情编辑工单
- 超级管理员的非正式发布状态的项目详情页面,只能跳转至一个项目详情填写工单
- 超级管理员的正式发布状态的项目详情页面,可以跳转至多个项目详情编辑工单
项目查看
- 所有项目页面
- 用户可以查看自己拥有权限的所有项目的列表
- 支持列表显示,卡片显示
- 点击项目之后,进入项目详情页面
- 项目详情页面
- 展示项目概览信息
- 具备查看权限,可以进行页面信息修改提交,发起修改工单,修改工单需要超级管理员审核
- 项目信息导出
- 支持按照YAML格式模板 导出项目信息
- 项目模块详情页面
- 部署业务信息、部署环境信息、部署中间件信息属于特定模块
- 作为TAB页签显示各个模块
- 授权信息页面
- 只有超级管理员可以访问
- 后端接口只有超级管理员具备权限
- 权限检验
- 审计日志记录
- 具体功能详见 项目授权管理
项目详情页面
- 查看状态
- 默认状态
- 项目详情页面有导出按钮,点击之后可以导出项目的详情
- 项目详情页面的字段具备快捷粘贴的功能
- 编辑状态
- 项目详情页面显示编辑按钮,点击之后进入编辑状态
- 编辑状态没有导出按钮
- 编辑状态具备 保存草稿 提交审核 放弃编辑的按钮
- 保存草稿按钮,触发项目详情的草稿保存功能,保存至数据库中
- 项目详情的编辑草稿 应该与非超级管理员用户产生关联
- 编辑状态,应该能够类似GIT DIFF显示草稿与正式版本的差异
- 在编辑页面,需要定期获取最新的版本
- 放弃编辑按钮,触发项目详情的草稿删除功能,删除数据库中的草稿,退出编辑状态
- 提交审核按钮,触发项目详情的草稿提交审核功能,可以复用项目详情填写工单流程(TODO 考虑与rmdc-work-procedure模块进行整合)
- 字段校验
- IP地址字段
- 公网IP地址 内网IP地址 如果不为空值,需要进行IP校验
- IP的空值处理,前端显示默认空值填充为 无
- 命名空间字段
- 前端创建项目时候,命名空间名称必须符合RFC 1123 DNS标签规范,具体要求包括:
- 不能超过253个字符
- 只能包含小写字母、数字以及'-'和'.'字符
- 必须以字母开头
- 必须以字母数字结尾
- 前端显示默认空值填充为 无
- 前端创建项目时候,命名空间名称必须符合RFC 1123 DNS标签规范,具体要求包括:
- IP地址字段
- 密码字段
- 项目填写人 需要填写密码字段
- 数据库加密存储,应该使用项目的TierOneScret进行加密
- 部署人姓名
- 非超级管理员也可以通过用户接口查找到系统中的用户 /api/user
- 部署人姓名字段,用于显示部署人姓名
- 超级管理员页面的项目详情页面
- 超级管理员的项目详情页面,默认显示主线版本分支的内容
- 超级管理员可以直接修改项目的master主分支,直接修改入库,不需要工单审批
- 超级管理员的项目详情页面,具备查看所有版本的功能
- 超级管理员可以查看所有版本的项目详情
- 可以查看页面的修订历史,类似GIT的历史提交记录
- 每一个版本可以查看到 修改的内容
- 超级管理员的项目详情页面,可以跳转至工单详情页面
- 超级管理员可以跳转至工单详情页面,查看与此项目关联的工单内容
- 超级管理员的项目详情页面,可以查看到授权信息模块的内容
- 非超级管理员左侧导航栏 显示 项目管理
- 默认展示其具备的全部访问权限的项目列表
- 支持列表、卡片显示
- 点击项目可以进入项目详情页面
- 默认展示其具备的全部访问权限的项目列表
项目创建
项目创建的流程说明
- 项目详情展示与填写类似于GIT的分支
- 项目查看,是由超级管理员审核维护的master主分支
- 项目创建流程,超级管理员分配一个用户进行项目信息登记
- 当项目初始信息被登记完成,超级管理员审批通过之后,项目信息作为初始的master主分支
- 项目编辑,是每个用户都具备的临时分支(每个用户都具备草稿),然后提交审核合并入master主分支(需要被超级管理员审核)
项目信息登记页面
- 项目创建只能由超级管理员进行
- 填写必要的信息,不需要考虑空值
- 考虑到数据库字段限制, 数据库不为空字段,填充默认值
- 项目创建中,需要按照管理权限,分配给特定的用户进行信息登记
- 特定用户填写时候, 前端自动过滤掉默认值
- 支持草稿功能,项目信息填写比较耗时,需要支持草稿功能
- 必填字段
- 填满才可以提交项目信
- 不填满只能保存草稿
- 信息审核
- 普通用户填写项目信息之后,需要超级管理员审核修改项目信息认证
项目详情填写审批工单
- 详情见 rmdc-work-procedure
- 当前阶段已经实现
项目详情填写页面
- 复用 项目详情页面 的编辑状态
特殊字段说明
- 前端创建项目时候,命名空间名称必须符合RFC 1123 DNS标签规范,具体要求包括:
- 不能超过253个字符
- 只能包含小写字母、数字以及'-'和'.'字符
- 必须以字母开头
- 必须以字母数字结尾
- 省份和城市字段 请参照3-china-province-city.md解析
- 后端和前端都应该维护一份枚举表
- 前端项目创建时,后端应该校验相应的省份和城市
- 前端应该实现级联选择
项目基本信息结构体
- 项目名称
- 命名空间(唯一)
- 项目ID project_id (唯一)
- 省份 (枚举 中国的省份是固定的)
- 城市(枚举 中国的城市是固定的)
- 行业组人员
- 行业组人员电话
- 项目性质 (科研、测试、试用、市场化、二级平台)
- 项目信息认证 (草稿,正式)
- 由超级管理员修改
- 部署业务结构体
- 部署环境结构体
- 部署中间件结构体
项目部署业务结构体
- 部署人姓名
- 部署人电话
- 部署开始时间
- 部署完成时间
- 部署系统的版本
- 部署系统(business老行业平台 fly-control新飞控平台 supervisor监管平台)
- 业务主要入口
- 系统超级管理员用户
- 系统超级管理员密码(需要加密存储)
项目部署环境结构体
- 主机信息结构体 (与rmdc-watchdog-common中保持一致)
- 此部分信息理论来自 rmdc-watchdog -> rmdc-exchange-hub 上报
- 新增字段
- 公网IP
- 能够访问公网
- SSH端口
- SSH用户名
- SSH密码 (需要加密存储)
- 主机角色(master worker storage)
- 网络环境 (完全内网、单主机公网、全访问公网)
- 主要公网IP地址
- 域名URL
- 是否开启SSL
- 主机管理方式(堡垒机、白名单、)
- 管理后台URL
- 管理后台用户名
- 管理后台密码(需要加密存储)
- 主机台数
- 主机CPU总数
- 主机CPU型号
- 主机内存总大小
- 主机存储总大小
项目部署中间件结构体
- MySQL结构体
- Redis结构体
- EMQX结构体
- MINIO结构体
- InfluxDB结构体
- Nacos结构体
- K8S Dashboard结构体
- 上述结构体的字段均有如下字段
- 公网IP
- 公网端口
- 内网IP
- 内网端口
- k8s访问地址
- k8s访问端口
- 超级管理员用户名
- 超级管理员密码 (需要加密存储)
项目授权信息结构体
- 项目一级TOTP授权密钥
- 一级授权允许时间偏移
- 开启TOTP验证
- 项目二级TOTP授权密钥
- 是否开启授权
- 授权类型: permanent/time
- 授权有效期(天)
- 授权时间
- 撤销授权时间
项目授权功能
- 集成之前 rmdc-wathchdog-center部分的功能
- 需要与 rmdc-exchange-hub rmdc-watchdog 交互
- 只有SuperAdmin具备此权限
- 接收来自 rmdc-exchange-hub 关于项目注册的信息
- 项目注册实际来自rmdc-watchdog
- 项目信息应该持久化保存
- 能够对全部项目进行授权
- 正常情况是从rmdc-exchange-hub接收的注册项目
- 处理来自 rmdc-exchange-hub 的授权信息
- 调用RMDC-watchdog-center的授权接口
- 存储项目的授权文件信息
- 授权时间也可以进行管理
- 有特殊的项目,无法访问公网
- 可以手动添加离线项目的相关信息
- 可以离线进行项目授权
- 能够取消对一个项目的授权
- 同样是通过rmdc-exchange-hub的在线方式
- 可以离线取消项目授权