3分钟快速了解猪齿鱼权限
本文将介绍数智化开发管理平台猪齿鱼Choerodon的权限体系,帮助猪齿鱼用户从自身需求出发,进行更细粒度的权限控制。本文也将对猪齿鱼中所应用的 RBAC 权限模型和 HZERO(汉得企业级 PaaS 平台)的角色权限体系进行简要介绍。
一、RBAC 权限模型
猪齿鱼 Choerodon 权限体系基于RBAC权限模型而建立。以下先简要介绍下RBAC模型。
RBAC是Role Based Access Control的英文缩写,意思是基于角色的访问控制。RBAC认为权限的过程可以抽象概括为:判断“Who是否可以对What进行How的访问操作”这个逻辑表达式的值是否为True的求解过程。即,将权限问题转换为Who、What、How的问题,Who、What、How构成了访问权限三元组。其中who是权限的拥有者或主体(User、Role),What是资源或对象(Resource、Class),How指具体操作(View, Edit)。
RBAC权限模型如下:
图片来源于网络
相对于直接将权限授予用户个人来说,RBAC权限模型增加了角色,授权会更加的灵活方便。角色可以理解为一定数量的权限集合,权限的载体。
RBAC主要包含四个子模型:RBAC0、RBAC1、RBAC2和RBAC3,整体又叫做RBAC96模型族。
图片来源于网络
RBAC0:RBAC0是权限管理的核心部分,其他的版本都是建立在RBAC0的基础上。简单来说,RBAC0就是一个用户拥有若干角色,每一个角色拥有若干权限。这样就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。并且将关系作为一个单独的概念来使用,这样可以在关系概念中加入一些其他的属性。
RBAC1:RBAC1建立在RBAC0的基础上,引入了角色继承的概念。有了继承。角色就有了上下级或者等级关系,每个等级权限不同,从而实现更细颗粒度的权限管理,比如:一个部门有正副经理,副经理的权限只有正经理的部分权限,这时候就可以采用RBAC1权限模型。
RBAC2:RBAC2在RBAC0模型的基础之上,增加了角色约束,主要约束哪些操作是可进行的,哪些是不可进行。
RBAC3:RBAC3是RBAC1和RBAC2的合集,所以RBAC3既有角色分层,也包括可以增加各种限制。
二、HZERO角色
猪齿鱼使用汉得企业级PaaS平台HZERO作为微服务开发框架,猪齿鱼的角色权限控制也使用了HZERO的角色权限体系。
HZERO是一个企业级PaaS平台,结合汉得多年的项目实施经验,抽象、封装了大量的应用标准服务及功能,以帮助企业产品研发、项目实施更加高效便捷,避免大量产品和项目重复造轮子带来的成本浪费。
在HZERO角色体系中,所有角色都是属于平台(超级)管理员或租户(超级)管理员的子孙角色。平台管理员拥有所有平台级权限,创建平台级权限集时,所有平台级权限会被自动分配到平台管理员上;租户管理员拥有所有租户级权限,创建租户级权限集时,所有租户级权限会被自动分配到租户管理员上。所以,创建权限集后,只能由对应层级的超级管理员往下分配权限。
HZERO角色体系分创建体系和继承体系,创建体系表现在父、子角色关系上,继承体系表现在继承角色关系上。两种体系的区别是:在分配权限时,例如,在给租户模板角色分配权限后,所有继承自该租户模板角色的角色将自动拥有该租户模板角色被分配的权限,用户可以一键往下分配继承自该租户角色模板的角色权限;创建体系则不能一键往下分配子角色的权限。在回收权限时,会回收整个创建体系、继承体系的权限。
具体使用详情可参考 HZERO角色管理文档。
三、猪齿鱼预定义角色
猪齿鱼预定义角色是猪齿鱼权限的基础,由平台默认创建,包括以下四个角色:
- 组织管理员角色模板:组织层所有权限
- 组织成员角色模板:组织层部分查看权限
- 项目所有者角色模板:项目层所有权限
- 项目成员角色模板:项目层部分操作权限
创建组织时,会基于这四个模板创建对应组织的相关角色,即所有组织的四个预定义角色,都继承自这四个角色模板;通过HZERO的继承体系,可以一键往下分配权限或者回收权限。
四、角色标签
猪齿鱼通过角色标签区分是组织层角色还是项目层角色、区分对应用服务的Gitlab权限,以此实现业务权限的灵活管理与有效隔离。
使用平台管理员角色,进入平台管理-》HZERO菜单-》角色管理菜单,进入HZERO标签管理界面。选择角色标签,可以查看猪齿鱼的所有角色标签及其含义。
该页面上可编辑的只有TENANT_ROLE、PROJECT_ROLE、GITLAB_OWNER、GITLAB_DEVELOPER等四个标签。
首先介绍进行层级区分的两个标签:
- TENANT_ROLE:用于标识猪齿鱼租户层角色,该标签有两个含义,一是用于区分HZERO的角色与猪齿鱼的角色,二是用于区分猪齿鱼的组织层角色和项目层角色。
- PROJECT_ROLE:用于标识猪齿鱼的项目层角色,含义同TENANT_ROLE。
值得注意的是,只有拥有以上两个中任意一个标签的角色,才能在管理中心-》角色管理进行查看和编辑。
另外,还有控制GitLab权限的两个标签:
- GITLAB_OWNER:当为用户分配拥有该角色标签的角色时,会自动为该用户分配项目下所有应用服务在GitLab的Owner权限。
- GITLAB_DEVELOPER:同GITLAB_OWNER,会自动为该用户分配项目下所有应用服务在GitLab的Developer权限。
以上两个标签的设置主要是为了解决用户拥有项目下的菜单权限,但是,在实际操作过程中,却没有GitLab权限而操作失败这一问题;但是因为这两个标签是给项目下所有应用服务分配权限,所以需谨慎使用,该标签需要配合PROJECT_ROLE标签使用。
附:猪齿鱼GitLab权限说明
1.猪齿鱼的组织所有者、项目所有者角色,默认拥有gitlab_owner角色标签,拥有项目下所有应用服务在GitLab的Owner权限;
2.对于项目成员默认没有Gitlab任何权限,可根据需要在代码管理界面,给用户分配具体的权限,包括Guest、Repoter等角色;
3.对于自定义角色,可根据需求选择GITLAB_OWNER或者GITLAB_DEVELOPER角色标签。
五、自定义角色
了解了角色标签的含义,我们可以开始创建自定义角色。
您可以在组织层或平台层找到自定义角色的入口:组织层-》管理中心-》角色管理;平台层-》角色管理。
1. 组织层角色管理
可以创建、编辑该组织下的所有自定义角色,创建项目层角色时,必须要选择GitLab角色标签,以避免拥有菜单权限,但是没有GitLab权限,从而导致操作失败的情况;在该界面创建的角色,会根据角色层级的不同,自动分配TENANT_ROLE或PROJECT_ROLE角色标签,且父级角色都是该组织的组织管理员。
具体使用详情可参考 角色管理帮助手册。
2.平台层角色管理
除了创建和编辑角色外,还可以复制和继承角色,以快速创建自定义角色。比如:您想要创建某个组织层角色(该角色需要拥有组织管理员除了创建项目的操作外的所有权限)时,您可选择组织管理员角色,点击“复制”,角色标签选择TENANT_ROLE,然后再去掉创建项目权限集即可。
具体使用详情可参考 HZERO角色管理文档。
综上,猪齿鱼的权限体系相对完善,猪齿鱼用户不仅可以一键分配或回收角色权限,方便快捷地进行权限管理;也可创建自定义角色,进行更细粒度的权限控制,满足自身的定制化需求。
如果您想尝试猪齿鱼的权限体系,欢迎您申请试用猪齿鱼: https://choerodon.com.cn/#/iam/register-organization
参考文档
- 猪齿鱼产品手册链接:https://open.hand-china.com/document-center/doc/product/10177/10608?doc_id=170160&doc_code=37618#%E8%A7%92%E8%89%B2%E7%AE%A1%E7%90%86
- RBAC模型: https://blog.csdn.net/qq_28988969/article/details/100995546
- RBAC的组成:https://zhuanlan.zhihu.com/p/158752542
- HZERO角色管理: https://open.hand-china.com/document-center/doc/component/161/16062?doc_id=154878&doc_code=28929
本文由猪齿鱼技术团队原创,转载请注明出处