RolandMa1986K零S
- 已编辑
lgy 首先,你是可以自定义角色的。你所问的问题分两个部分:
- 对于后端API鉴权,就像@hongming 提到的两篇文档一样,只要你创建符合 K8S规范API定义的 role 和rolebinding 就有对应的资源的访问权限。
- 前端鉴权,前端与后端的鉴权需求不一样。 后端鉴权以GVK 为单位,可以对每个Verb 单独授权。这样的设计是前端不能接受的,前端完成一个动作通常需要很多API的配合,而且前端主要以菜单和按钮的动作为单位进行授权。但这通常需要一些列的API调用才能完成。因此在Kubesphere中以 Role为基础添加了以下 Annotation和labels 作为前端交互的控制协议:
metadata: annotations: iam.kubesphere.io/dependencies: '["role-template-view-groups","role-template-view-roles"]' iam.kubesphere.io/module: Access Control iam.kubesphere.io/role-template-rules: '{"groups": "manage"}' kubesphere.io/alias-name: Workspace Groups Management labels: iam.kubesphere.io/role-template: "true" name: role-template-manage-groups
- iam.kubesphere.io/role-template: “true” 定义了前端为完成一个操作做需要的全部后端 API 权限的集合。前端授权以role-template为基本单位。role-template, 并不会直接与用户绑定,这个角色的权限最终会汇集在用户自定义role,或者预定义role中。
- - iam.kubesphere.io/role-template-rules: ‘{“groups”: “manage”}’ 定义了前端对应菜单的key与动作类型。 前端抽象出了 view, create,edit,delete,manage等基本操作,manage表示其包含了view, create,edit,delete等所有的权限。
- - iam.kubesphere.io/dependencies: ‘[]’ 依赖的其他role template,参考一下前端 权限管理。