指南工作区

CKBox 工作区提供了一种便捷的解决方案,用于在 CKBox 内实现数据隔离和用户分离。使用工作区,您可以轻松创建独立的存储和数据空间,从而对将特定用户、用户组或租户分配到每个工作区进行精确控制。

本指南提供了有关配置单个 CKBox 实例的一般说明,这些说明可以根据存储和数据管理的要求进行调整。

# 管理工作区

在 CKBox 中管理工作区仅对授予 superadmin 角色的用户可用。在创建 JWT 令牌以进行授权时,请确保在 auth.ckbox.role 字段中设置了正确的用户角色

{
    "aud": "NQoFK1NLVelFWOBQtQ8A",
    "sub": "example-user-id",
    "iat": 1511963669,
    "auth": {
        "ckbox": {
            "role": "superadmin"
        }
    }
}

# 通过管理面板管理工作区

工作区也可以轻松地直接从管理面板进行管理 - 创建、删除或重命名。要访问这些设置,用户需要 superadmin 角色。

Managing workspaces.

左上角的工作区下拉菜单允许管理员选择要 管理和设置 的工作区。右上角的超级管理员按钮允许用户管理工作区。进入此区域将显示当前可用工作区的完整列表,以及添加、删除或重命名这些工作区的工具。

# 创建工作区

使用右上角的+按钮将调用添加工作区对话框。

Adding a workspace.

输入所需的新工作区名称,然后点击保存。新工作区将出现在列表底部。

New workspace added.

由于每个工作区都具有唯一的 工作区 ID(显示在工作区名称下方),因此可以为两个或多个工作区命名为相同名称。但是,这可能会导致用户之间的混淆。

# 重命名工作区

使用位于工作区名称右侧的铅笔图标将调用重命名工作区对话框。

Renaming a workspace.

输入工作区的新的名称,然后点击保存。重命名的工作区将替换列表中的旧名称。

# 删除工作区

如果要删除工作区,请使用位于工作区名称右侧的红色垃圾桶图标。它将调用删除工作区对话框。

Deleting a workspace.

要完成删除操作,您需要先键入工作区的名称,然后点击删除按钮。这是为了避免意外删除,因为删除的工作区无法恢复

删除工作区也会删除上传到该工作区的所有资产。此操作不可逆,所有资产都会永久丢失。

# 使用 REST API 管理工作区

您可以使用 REST API 自动化工作区管理流程。

# 创建、更新和删除工作区。

CKBox REST API 提供了几个端点,允许进行工作区管理

# 定义类别模板

工作区附带默认存储类别,即文件、文档和图像。使用类别模板,superadmin 用户可以定义工作区的整体结构,并自动控制新创建的工作区的默认类别集。
如果您愿意,可以使用类别模板来定义应与新工作区一起创建的类别。您可以使用类别模板选项卡访问这些设置。

Defining category templates.

# 创建类别模板

使用右上角的+按钮将为新的类别模板创建一个空的占位符。您将被要求为新创建的类别模板定义两件事

  • 类别模板名称 - 使用此模板创建的类别的唯一名称。
  • 允许的扩展名 - 使用此类别模板创建的类别中可用的文件扩展名列表。

如果您以后改变主意,可以通过 编辑类别模板 来编辑所有这些信息

Creating a category template.

# 编辑类别模板

可以随时编辑现有的类别模板。您可以更改其名称和允许的文件扩展名列表。

Editing a category template.

# 更改类别模板顺序

类别模板部分中列表中的类别模板顺序与使用新工作区创建的类别顺序相匹配。要更改类别模板位置,请点击左侧的拖动句柄,并将其移动到目标位置。

Moving a category template.

# 删除类别模板

要删除类别模板,请在列表中找到它,然后点击删除按钮。将显示一个确认对话框,您将被要求确认操作。

Deleting a category template.

# 全局限制扩展

在管理面板的允许的扩展名选项卡中,您可以限制允许使用的扩展名。
如果启用了全局限制扩展名选项,则仅允许上传具有此处指定扩展名的文件。此外,类别设置仅允许此处列出的扩展名作为允许的扩展名添加。

# 启用限制扩展

要对允许的扩展名强制执行限制,请使用全局限制扩展名选项旁边的切换按钮。最初允许的扩展名将包含所有工作区中所有现有类别中当前定义的所有允许的扩展名。

Enabling globally limited extensions.

# 编辑限制扩展名列表

要编辑允许的扩展名列表,请使用编辑按钮。

当前使用的扩展名将在允许的扩展名列表中以粗体显示。删除使用的扩展名将永久删除所有类别中使用已删除扩展名的所有资产。为了避免意外删除数据,将显示一个确认对话框。

Editing globally allowed extensions.

# 将用户分配到工作区

对工作区的访问是通过 用户 JWT 令牌auth.ckbox.workspaces 字段进行控制的。作为值,auth.ckbox.workspaces 接受一个数组,其中包含用户应该有权访问的工作区

{
    "aud": "NQoFK1NLVelFWOBQtQ8A",
    "sub": "example-user-id",
    "iat": 1511963669,
    "auth": {
        "ckbox": {
            "role": "superadmin",
            "workspaces": [ "workspace-id-1", "workspace-id-2" ]
        }
    }
}

在上面的示例中,ID 为 example-user-id 的用户被分配到两个工作区:workspace-id-1workspace-id-2

# 多个工作区

如果用户被分配到多个工作区,他将看到一个下拉菜单,允许更改活动工作区

Active workspace switch.

请注意,当用户被分配到多个工作区时,每个工作区都保持独立。因此,例如,无法在不同的工作区之间复制或移动文件。

# 不同用户角色对工作区的访问

网站环境 中存在的工作区的访问取决于用户角色,其工作方式如下

  • superadmin - 在令牌中设置了 superadmin 角色的用户可以访问给定网站环境中存在的**所有工作区**。请注意,为 superadmin 角色定义 auth.ckbox.workspaces 不会有任何效果,它将被忽略。
  • adminuser - 拥有 adminuser 角色的用户只能访问 auth.ckbox.workspaces 字段中定义的工作区(或者访问默认工作区,如果没有明确定义工作区)。

# 默认工作区

每个网站环境都会自动创建一个名为“默认工作区”的特殊工作区。如果用户的 JWT 令牌中未明确设置工作区访问权限,则用户将自动分配到此默认工作区。

请注意,如果您在用户的 JWT 令牌中明确定义了工作区,则用户将无法访问默认工作区,除非其 ID 在用户的 JWT 令牌中定义的 auth.ckbox.workspaces 字段的允许工作区列表中被明确定义。

为了向后兼容,默认工作区的标识符与网站环境的标识符相同。

与其他工作区不同,默认工作区**无法删除**。

# 工作区的用法示例

下面,您将找到有关在哪些流行用例中可以有效利用工作区的描述。请注意,以下列表并不详尽,因为在将 CKBox 集成到您的应用程序时,还可以以各种自定义方式利用工作区以满足特定要求。

# 为用户设置独立的工作区

许多类型的应用程序中经常需要一个场景,即在不同用户之间分离数据。例如,您可能拥有一个 CMS,您希望为每个用户提供私有文件存储。在 CKBox 中,您可以使用内置工具为每个用户创建个人空间。

这可以通过工作区功能的两步简单操作实现

  1. 创建工作区 - 请参考管理工作区部分。
  2. 通过设置用户 JWT 令牌的 auth.ckbox.workspaces 字段将用户分配到工作区 - 请参考将用户分配到工作区部分。

所有共享同一工作区的用户将可以访问该工作区中的相同文件夹和文件。要创建私有用户空间,您必须确保每个用户只分配到他自己的工作区。

这种情况下,完整的令牌有效负载示例可能如下所示

{
    "aud": "NQoFK1NLVelFWOBQtQ8A",
    "iat": 1511963669,
    "sub": "example-user-id",
    "user": {
        "email": "example@example.com",
        "name": "A User",
        "avatar": "https://example.com/avatars/john.png"
    },
    "auth": {
        "ckbox": {
            "role": "user",
            "workspaces": [ "user-workspace-id" ]
        }
    }
}

请注意,具有 adminuser 角色的用户将被限制在用户 JWT 令牌的 auth.ckbox.workspaces 字段中定义的工作区内,而具有 superadmin 角色的用户可以访问当前环境中存在的**所有工作区**。有关详细信息,请参阅不同用户角色的工作区访问权限部分。

# 用户组的工作区

您可以将任意数量的用户分配到工作区。要将多个用户分配到 ID 为 shared-workspace-id 的共享工作区,只需在为所选用户发行的令牌的 auth.ckbox.workspaces 字段中设置工作区 ID。

这种情况下,完整的令牌有效负载示例可能如下所示

{
    "aud": "NQoFK1NLVelFWOBQtQ8A",
    "iat": 1511963669,
    "sub": "example-user-id",
    "user": {
        "email": "example@example.com",
        "name": "A User",
        "avatar": "https://example.com/avatars/john.png"
    },
    "auth": {
        "ckbox": {
            "role": "user",
            "workspaces": [ "shared-workspace-id" ]
        }
    }
}

# 多租户应用程序

多租户应用程序是指同时为多个客户或组织提供服务的软件,同时保持其数据和操作独立且安全。每个租户通常都拥有应用程序的独立隔离实例,使他们能够自定义其设置并访问自己的数据。

出于本示例的目的,让我们考虑一个多租户 CMS 系统,它托管多个网站,每个网站由不同的用户组管理。租户是指一组共享对软件实例的特定权限的共同访问权限的用户 - 在我们的 CMS 案例中,每个租户维护自己的网站。每个租户的网站数据是分开的,我们旨在在 CKBox 中实现相同的数据分离。此外,对于所考虑的 CMS 中的每个租户,有两个用户组

  • 普通用户 - 内容创建者
  • 管理员 - 具有管理权限的用户,可以配置网站设置

这也可以使用 CKBox 工作区功能实现。在这种情况下,可以为每个租户创建一个单独的工作区,并将所需的用户分配到该工作区,方法是在从令牌端点提供给用户的 JWT 令牌的有效负载中设置适当的 auth.ckbox.workspaces 属性。这样,所有共享同一工作区的用户都将可以访问相同的文件夹和文件。

在本示例 CMS 系统中,只有管理员被允许配置应用程序,他们将具有设置为 adminauth.ckbox.role,这将授予他们访问 CKBox 的管理面板的权限。

不同用户角色的工作区访问权限部分所述,CKBox 中的 adminuser 角色与工作区范围相关联,而 superadmin 可以访问当前 CKBox 网站环境中存在的的所有工作区。在我们的示例 CMS 中,superadmin 可以是系统管理员,他可以访问 CMS 系统中所有租户的工作区。

CMS 管理员用户的完整令牌有效负载示例可能如下所示

{
    "aud": "NQoFK1NLVelFWOBQtQ8A",
    "iat": 1511963669,
    "sub": "admin-user-id",
    "user": {
        "email": "admin-user@example.com",
        "name": "An Admin User",
        "avatar": "https://example.com/avatars/john.png"
    },
    "auth": {
        "ckbox": {
            "role": "admin",
            "workspaces": [ "tenant-workspace-id" ]
        }
    }
}

CMS 普通用户的完整令牌有效负载示例可能如下所示

{
    "aud": "NQoFK1NLVelFWOBQtQ8A",
    "iat": 1511963669,
    "sub": "regular-user-id",
    "user": {
        "email": "user@example.com",
        "name": "A User",
        "avatar": "https://example.com/avatars/john.png"
    },
    "auth": {
        "ckbox": {
            "role": "user",
            "workspaces": [ "tenant-workspace-id" ]
        }
    }
}