全局角色
CubeStudio 基于 Flask-AppBuilder 框架,自带了 RBAC 角色管理。不过目前此部分的角色主要为 gamma 角色(普通使用者)和 admin 角色。

- admin 角色可以全局资源都可查看
- gamma 角色为普通使用者角色
说明:新注册用户默认分配的角色由配置项
AUTH_USER_REGISTRATION_ROLE决定,平台默认值为Gamma(见install/kubernetes/cube/overlays/config/config.py:75)。
菜单访问控制
编辑角色,可为角色添加控制对应菜单的访问权限。再将角色分配给不同的用户,以此来实现不同用户看到不同的菜单。

api 调用认证
CubeStudio 所有的后端接口访问都需要用户身份认证,api 调用时需要在添加 header。
所有 api 操作 header:
headers = {
'Content-Type': 'application/json',
'Authorization': '$token'
}
其中 token 的获取在个人详情页面。

实现说明:
Authorization既可以传短用户名(仅在AUTH_PLATFORM_ACCESS开启或经 K8s 内部域名kubeflow-dashboard.infra访问时放行,见myapp/security.py:667-669),也可以传 token。token 本质是一段 JWT:payload 为{"sub": 用户名},用配置项JWT_PASSWORD以 HS256 签名,并去掉固定 header 段以缩短长度(生成见myapp/security.py:168-187,校验见:661-685)。JWT_PASSWORD默认配置为myapp(install/kubernetes/cube/overlays/config/config.py:225);配置缺失时代码兜底取值为cube-studio(myapp/security.py:183、:681)。
项目组中角色
其他对数据的权限,都是基于项目组或者个人的。

用户在项目组内的角色有 4 个:creator、ops、dev、auditor(审计),默认 dev(见 myapp/views/view_team.py:108)。不同角色在不同场景下权限不同。
- 项目组场景下,creator 角色用户可以添加其他用户进入项目组
- 在线开发 / 任务 ETL,同项目组中均可见
- 模型训练 / 任务流,同项目组中均可见
- 模型训练 / 超参搜索,同项目组中均可见
- 服务化 / 内部服务,同项目组中均可见
- 服务化 / 推理服务,同项目组中均可见,项目组 creator 可以部署,其他同项目组仅可查看
其中 auditor 为审计角色,用于对项目组数据做只读审计。
管理员
在有些功能地方,只允许管理员查看,管理员包括两类:
- 一类是在界面上,项目空间 / 用户列表中,为用户添加了 admin 角色的,可以全局数据都可以看到,但是该类用户不是运维人员,只是平台的 boss
- 一类是在配置文件 config.py 中定义的
ADMIN_USER,该变量定义的是平台的运维人员,用于接收系统级别的报警(默认值ADMIN_USER='admin',见install/kubernetes/cube/overlays/config/config.py:690)
目前仅管理员能看到的包括:
- 项目空间 / 资源配置
- 项目空间 / 安全设置
- 项目空间 / 链接
- 私有知识库
个人权限
在有些功能地方,每个用户只允许看到自己的数据。比如:
- 在线开发 / 镜像仓库
- 在线开发 / 镜像构建
- 在线开发 / 镜像管理
- 在线开发 / notebook
- 模型训练 / 任务模板
- 模型训练 / 定时调度
- 模型训练 / 运行实例
- 服务化 / 模型管理
责任人机制
部分场景下为每个数据都配置专门的责任人,只有有权限的责任人可以看到数据,例如:
- 数据资产 / 指标
- 数据资产 / 维表
- 数据资产 / 数据集
- 数据智能,只能看到自己是责任人,或者公开的私有知识库
完全公开
有些部分的数据是完全开放给所有人的,比如:
- 数据资产 / 库表
- 服务化 / 整体资源
- aihub 模型市场
独立的用户权限体系
有些场景下不是用自带的账户体系,而是现场创建账户体系,主要存在于与外部人事相关的平台部分。比如:
- 标注平台