接入组织机构管理

借助 Authing,可以快速实现基于角色的访问控制(RBAC)。简单来说,RBAC 指的是通过用户的角色(Role)赋予其相关权限,这实现了细粒度的访问控制,并提供了一个相比直接授予单个用户权限,更简单、可控的管理方式。

而在现实生活中,组、角色往往是分层嵌套的,呈树状结构,最常见的就是组织机构,如公司、学校等等。这篇文章,我们会设想一家互联网公司 —— 「非凡科技有限公司」,看看他们是如何使用 Authing 快速完成组织机构建模的。

非凡科技有限公司背景介绍

非凡科技有限公司的公司架构如下:

  • 一级部门有产品部、研发部、运营部、综合管理部

  • 一级部门下面又有二级部门,如产品部中包含产品经理和设计等。

这是一个典型的树状结构,其中有且仅有一个根节点,一般而言,根节点就是一家公司、一个组织。每个节点对应一个分层的部门。

这里有一点需要注意:在 Authing 中,这样的节点对应的是一个 Group,一个 Group 可以拥有多个角色(Role),一个角色包含一个或多个权限(Permission);而一个 Group 由若干用户(User)组成,某个 Group 中的用户会继承该 Group 下的所有角色,从而具备相关权限。

在 Authing 中,组织机构(Org)是一组树状的 Group 集合,而 Org 的节点(Node)本质上就是一个 Group。

了解如何管理 Group 中的 User、如何管理 Group 中的 Role、如何配置 Role 的 Permission,请见:

权限控制

了解如何查询单个用户的 Group, Role, Permission 列表,请见:

查询用户权限

使用 Authing 完成组织机构管理

本文中用到的 createGroup,createRole 等为封装的方法,如下所示。

参见此测试用例:https://github.com/authing/authing.js/blob/master/tests/org.js

本文使用 Node.JS SDK 演示,具体接口请参考:

组织机构管理

非 JavaScript 开发者请使用 API 调试器:

梳理组织机构节点

首先,我们需要列举出该组织结构拥有的所有节点:

  • 非凡科技有限公司

  • 产品部

  • 研发部

  • 运营部

  • 综合管理部

  • 产品经理

  • 设计

  • 开发

  • 测试

  • 运维

  • 用户运营

  • 渠道运营

  • HR

  • 财务

  • 行政

这些节点在 Authing 中都是一个 Group,所以需要先创建这些 Group:

创建组织机构

接着创建组织机构(一组树状的 Group),这需要指定根节点对应的 Group:

加入产品部及其子部门节点

接着插入产品部的各级节点:

这里需要指定以下参数:

  • 组织机构 ID

  • 该节点对应的 Group ID

  • 该节点的父节点的 Group ID

如加入产品部节点时,groupId 为 Group<产品部> 的 ID,parentGroupId 为 Group<非凡科技有限公司> 的 ID。

以此类推,加入所有节点

研发部:

运营部:

综合管理部:

查看最新组织机构结构

到现在,我们的非凡科技有限公司组织机构见建模完成了,是时候获取其最新的树状结构了:

tree 数据如下所示:

如何向组织机构中添加用户和配置权限

前面说过,Authing 中一个组织结构节点对应一个 Group,对此我们提供了完整的 SDK。

为组织机构节点配置权限

相关 API 见:

权限控制

非凡科技有限公司的所有员工,都具备开具发票、使用公司邮箱的权限。与此对应,在此我们创建两个角色:Invoice Submitter 和 Corp Email User。

其中 Invoice Submitter 具备以下权限:

  • invoice:login

  • invoice:create

  • invoice:query

  • invoice:list

  • invoice:delete

Corp Email User 具备以下权限:

  • corp-email:login

  • corp-email:send

  • corp-email:receive

  • corp-email:list

  • corp-email:detail

这可以通过以下代码完成:

接着让 Group 非凡科技有限公司具备 Invoice Submitter 和 Corp Email User 两个角色:

向组织机构节点添加用户

相关 API 见:

权限控制

某个 Group 内的用户会继承该 Group 内所有角色的权限(如果有重叠,将会取并集)。

下面我们往用户池中注册新用户,然后将其加入非凡科技有限公司 Group 中:

查询用户具备的权限

相关 API 见:

查询用户权限

permissionList 如下:可见,此用户已经继承了 Invoice Submitter 和 Corp Email User 两个角色的所有权限:

开发者拿到用户权限列表之后,可以在业务代码层判断用户是否具备某一特定权限,如:

总结

本文我们以「非凡科技有限公司」为例,介绍了如何将一棵组织机构树转换成一组嵌套、有层次的 Group。通过 Authing 提供的分组角色权限管理 API,可以为 Group 配置角色、指派成员,使得该 Group 中的用户继承所需的权限,从而完成组织机构建模与权限控制。

Last updated

Was this helpful?