权限管理

在上一个小节中,我们已经了解到如何建立用户与角色之间的关系,这样的关系不仅使得我们可以更容易地通过角色对用户进行分组查看,更是因为 RBAC(基于角色的访问控制)机制中是通过角色来建立用户与权限之间的关系的,也就是说一个用户所拥有的权限,取决于他的角色关联了哪些权限。接下来,就让我们来看一下如何创建一个权限以及如何配置权限到某个角色上。

数据表格

同样,权限管理的入口在左侧菜单栏中,点击进入其管理界面,中央是列举了所有权限的数据表格。此时,您可能已经留意到,表格中已经存在了很多的权限数据,这些权限都是在初始化系统时默认生成的,恰恰就是它们管控了对 FreeAuth 当前各个模块下功能的访问。比如,manage:users 就是用来控制对用户管理页面及其相关操作的访问权。

FreeAuth Permission Management

如同其他管理表格,权限管理表格也支持对数据的过滤、搜索、排序,以及编辑等操作;每一个权限也都有自己的详情页,类似于角色详情页、用户详情页等。为了避免过多的重复,在这里我们就不再对这些基础操作一一展开进行说明了。但是,权限表格中的 权限代码 字段在这里是值的一提的,它被设计为供您在您未来的应用程序代码中使用(写入),以排除未经授权的访问。举个例子,权限表格里的 manage:roles 是用来控制对角色相关操作的权限,我们首先是在这个管理后台创建了该权限,并赋予它一个有意义的 权限代码,即 manage:roles,然后我们会在编写这个功能的应用代码时,使用到它,如下图所示,从而实现对角色相关操作的访问控制。

FreeAuth Permission Code

因此,一旦某个权限的 权限代码 已经在您的应用代码中被使用(被写入),那么在管理后台对其 权限代码 的修改需要更为慎重。如果您在管理后台修改了这个权限的 权限代码,请不要忘记在您的应用代码中同时更新使用到它的地方,否则,即便某个用户的角色有关联该权限,该用户也不是真的拥有了该权限被期待对应的那个功能,因为在实现对应功能的代码中,您仍然使用的是旧的权限代码。比如,FreeAuth 实现了角色管理的相关功能,并使用 manage:roles 来控制其访问权。此时,您处于某种原因在后台将该权限的 权限代码manage:roles 改为了 manage: identities。如果 FreeAuth 的源代码中使用了 manage:roles 的地方没有做相应的更新,您将失去角色管理的权限,因为你的代码里正在使用的是 manage:roles,而你在后台关联的权限是 manage:identities,因此你只是会得到一个权限代码是 manage:identities 的新权限,但其没有对应管控任何实际的功能。

关于应用

正如您所见,权限管理页面也同其他管理页面的结构类似,然而,在表格的左上方,除了基础的搜索框以外,其左侧还有一个应用选择器,默认选中了 FreeAuth,这其实是对后续 生态功能 的一个铺垫。实际上,FreeAuth 现在只是一个实现了用户管理、访问控制等功能的框架,开发人员可下载源代码在其基础上进行二次开发,实现定制化的其他业务功能,但不久的将来,FreeAuth 将会同时支持作为一个独立的公共服务,面向多个应用提供单点登录、身份认证等功能。这就是为什么这里会出现一个应用选择器,未来,您可以在应用管理页面创建和维护需要对接的应用信息,FreeAuth 会为每个应用提供一对 AppIDAppSecret,作为应用与 FreeAuth 之间的通信凭证,从而在 FreeAuth 中获取用户的身份权限等信息。

FreeAuth Application Selector

权限标签

在权限管理页面中,还值得一提的是表格右上方的 管理标签 按钮以及表格中的 权限标签 列。这里的标签就是使用一些关键词对权限进行标记从而进行分类,且一个权限可以标记多个标签。

想要管理这些标签,则可通过点击表格右上方的 管理标签 打开对应的标签管理弹窗,如下图所示,您可以在这个弹窗中创建标签、删除标签、编辑标签,以及通过拖拽的方式调整标签被引用时的展示顺序。

FreeAuth Permission Tag Management

在接下来的小节中,我们可以看到这些标签是如何被使用到的。

创建新权限

如果你计划基于 FreeAuth 二次开发新的功能,通常你都需要同时定义一个新的权限来管理该个功能的访问权。为了创建新的权限,点击权限表格右上角 管理标签 右侧的 创建权限,下图中创建权限的表单则会弹出。在这个表单中,正如我们之前所说,最关键的字段就是 权限代码,因为它将会被直接使用在你的应用代码中,所以为其创建一个有含义的代码将会提高您的代码的可读性。

FreeAuth Permission Management - Create Form

此外,权限标签 字段是选填项,点击后下拉选择框中会展示所有已经创建的可用标签,在这里,您可以选择多个标签进行关联。如果没有选项适合您要创建的权限,您也可以直接在输入框中录入新标签的名称,点击回车后,该标签将自动附加到标签录入框中,但这不意味着您已经为系统创建了一个新的标签,即存储在数据库里,只有当您点击这个表单的保存按钮,成功提交信息后,新标签才会随着新权限的创建一并存储到数据库中。

FreeAuth Permission Management - Create Form

配置权限

截止到现在,高级功能中涉及的角色和权限数据都已经就绪,那么建立他们之间的关系则有两种方式。第一种方式是给某一个指定权限添加多个角色。这种方式需要您先进入到目标权限的详情页,并将位于上方的选项卡切换至 关联角色,然后点击其下方面板右上角的蓝色 添加角色 按钮,并按照提示进一步完成多个角色的关联,这里我们就不再赘述细节了。

FreeAuth Permission Details Page - Add Roles

另一种方式是为某一个指定的角色勾选其所需的所有权限。这种方式需要您先进入到目标角色的详情页,并将位于上方的选项卡切换至 配置权限,然后其下方面板则会列出系统中的所有权限,且每一个权限行的最开头是一个勾选框,如果该勾选框处于勾选状态,则意味着当前角色拥有该权限,反之,当前角色与该权限无关。值得注意的是,如果一个角色已经关联了某个应用下的 通配符权限,那么该角色实际上就拥有了该应用下的所有权限,所以您不必再为其勾选该应用下的其他权限,虽然系统并不会阻止您这样做。

FreeAuth Role Details Page - Change Permissions

从上图可见,如果在您为某个角色配置权限时,您想要快速定位到目标权限,您可以通过关键字搜索或者点击搜索栏上方的权限标签来进行过滤。

在这个页面,您很容易就可以了解到一个角色包含了哪些权限,那么如果您想看某一个用户拥有哪些权限呢?您可以先通过用户管理表格中的用户姓名进入到该用户的详情页,并将位于上方的选项卡切换到 权限信息,这里会为您列出该用户因为其所关联的角色而拥有的去重后的全部权限。

FreeAuth User Details Page - Permission List