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

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

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:655-657),也可以传 token。token 本质是一段 JWT:payload 为{"sub": 用户名},用配置项JWT_PASSWORD以 HS256 签名,并去掉固定 header 段以缩短长度(见myapp/security.py:155-175生成、myapp/security.py:649-676校验)。JWT_PASSWORD在默认配置里为myapp(见myapp/config.py:241);代码在该配置缺失时的兜底取值才是cube-studio(见myapp/security.py:171、:669),实际部署以config.py的取值为准。
项目组中角色
其他对数据的权限,都是基于项目组或者个人的。

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