角色与权限

假设你把同事 minji.kim@example.com 加入了服装店商城的 Space。你想把上架和修改商品的工作交给这位同事,但要把删除商品或对外公开商品的工作也交出去,就会让人有些不放心。像这样,把"一个 Space 内成员能做什么、不能做什么"事先定好的权限组合,就是 SpaceRole

SpaceRole 不是给每一位成员单独配置权限,而是先做好一组权限,再把它套用到成员身上。例如,只要做好一个"只能阅读和修改商品"的角色,把这一个角色套用到负责上架商品的同事身上即可。即使成员越来越多,也不必每次从头配置权限。

本页先介绍 SpaceRole 是什么、能包含哪些权限,然后在服装店 Space 中亲手创建一个"商品上架负责"角色。

Space 角色与 Organization 角色不同

WEEGLOO 中有两处地方用来设定权限。这两者容易混淆,所以先划清界限。

  • Organization 角色(OwnerAdminMember)是在整个公司层面的等级。它决定谁可以做横跨整个 Organization 的事,比如邀请成员或新建 Space
  • SpaceRole 是某一个 Space 内部的权限。它决定成员在进入该工作空间后,处理内容的工作能做到什么程度,比如创建商品、修改商品、发布商品。

即使是同一位同事,也可以在不同的 Space 中给予不同的 SpaceRole。比如在商城 Space 中允许其修改商品,而在公司公告用的 Space 中只允许其阅读。本页只讲 SpaceRoleOrganization 角色以及成员的邀请与分配,请参阅组织与空间

角色中包含的内容:对什么,做什么动作

一个 SpaceRole 中包含的是"对什么对象、做什么动作、允许还是拒绝"。

首先,设定权限的对象共有四种。其中下面这三种对象共用同一组动作,第四种 Script 因动作不同,放在后面单独介绍。

  • Content Type:商品、公告之类的模板
  • Content:用该模板创建的一个个商品
  • Media:上传的照片、视频之类的文件

每种对象可以允许或拒绝的动作如下。

动作在界面上以英文显示。各动作的含义如下。

动作(界面显示)做什么
Read查看列表和内容
Create新建
Edit修改已有的项目并保存
Delete删除
Publish发布,使其对外公开(传递)
Unpublish撤下发布,停止对外公开
Archive移入归档状态
Unarchive从归档中还原
All actions一次性允许以上所有动作

以服装店为例来说,"商品上架负责"角色对 Content(商品)允许 Read、Create、Edit,而不放入 Delete、Publish,像这样挑选动作放入。这样一来,同事可以创建和修改商品,但不能删除或对外公开。

Publish 是什么、发布后如何对外公开(传递),在状态与发布中详细介绍。

允许与拒绝

角色界面上分别有 允许 列表和 拒绝 列表。做法是把想要让其能做的动作,一行一行地放入 允许 列表。重要的一点是,没有放入允许列表的动作会被自动拒绝。 因此只要把想要给同事的动作放入允许列表,其余的不必另行屏蔽也会被屏蔽。

拒绝 列表是一种安全机制,用在"想要广泛允许,但只把特定部分作为例外屏蔽掉"的时候。当一个动作同时被允许和拒绝命中时,拒绝始终优先。

缩小到特定种类、特定人员

在允许一个动作时,可以把这份允许只缩小到某一种类或特定条件。例如可以做如下缩小。

  • 只限一种:只对"商品" Content Type 生效,不对其他 Content Type 生效。
  • 只限自己创建的:只让该成员能处理自己亲手创建的 Content,不能动别人创建的。
  • 只限带有特定 Tag:只对带有指定 TagContentMedia 生效。

如果不另行缩小范围,该动作就会对相应对象的全体生效。例如,不缩小地允许阅读 Content,就能阅读所有 Content;缩小到"商品" Content Type,就只能阅读商品。

Tag 是什么,请参阅 Tag

Script 执行与管理权限

SpaceRole 除了前面这三种对象之外,还包含对 Script 的权限。Script 是前端调用的、无需服务器代码就能创建的后端端点(参阅 Script)。这里有一个 ContentMedia 所没有的 Execute(执行)动作。

  • Execute:让其能够执行(调用)该 Script。前端或注册会员想要调用 Script,就需要这项权限。
  • ReadCreateEditDelete:查看、创建、修改、删除 Script 的管理权限。

可以按作者缩小到"只限自己创建的 Script"。这里没有发布动作,因为 Script 不是需要发布的资源。对于注册了产品的会员(ServiceUser),通常只开放 Execute。因为创建和修改 Script 的编写工作,由内容工作室的使用者负责。

Role 编辑器的 Script 权限标签页。允许列表中放入一条规则,动作为 Execute、范围为任意 Scripts、作者为任意用户的状态

权限规则的确切格式,在 SpaceRoleServiceUserRole API 参考中介绍。

能否更改 Space 设置也由角色决定

到目前为止讲的都是处理内容和 Script 的权限。角色中还包含一份性质不同的列表,就是能否更改 Space 设置。

回到服装店的例子。你可能想把商品上架交给同事,但不会想把新增 Locale、或者签发给外部网站使用的令牌这类工作也交出去。这类 Space 设置工作由谁来做,就由这份列表决定。

与前面的权限不同,这份列表既没有动作,也没有范围缩小。开启一个项目就能处理该设置,不开启就不能处理。 在创建或修改 Role 的画面的 Permissions 标签页中开启或关闭。开启最上方的 所有管理 Permission 会一次性开启下面的全部项目,逐个开启全部项目后该开关也会显示为开启。 可以开启的项目如下。

项目开启后可以做的事
管理 Space 信息修改 Space 的名称和说明
管理 Membership把成员加入这个 Space 或从中移出,并更改成员的角色
管理 Role像本页这样创建和修改角色
管理 Delivery Access Token签发和管理只读令牌
管理 Space Access Token签发和管理可读写的令牌
管理 Locale添加语言或更改默认语言
管理 Email Account登记发送邮件时使用的发件账户
管理 App从市场取来应用并安装
管理 Tag创建、修改、删除 Tag
管理 Web Hosting部署网站并连接域名
管理 ServiceLogin为注册产品的会员设置登录和会员权限
管理 Webhook创建 Webhook 并查看调用记录
管理 Scheduler创建 Scheduler 并查看执行记录
查看监控查看这个 Space 用掉的容量和流量

请注意,这两种令牌是分开的。可以只允许签发只读的 Delivery Access Token,而不允许签发可读写的 Space Access Token。当你想让同事自己签发要放到公开网站上的读取令牌,而能写入的令牌只让管理员创建时,就这样分开给予。

管理 Scheduler 仅有这一项还不够。创建或修改 Scheduler 时,还需要同时具备它要执行的那个 ScriptExecute 权限(参阅以谁的权限运行)。

如果一个项目都不开启,这个角色就成了只处理内容的角色。后面要创建的"商品上架负责"角色就是这种情况。它可以上架和修改商品,但完全动不了 Space 设置。

创建 Role 画面的 Permissions 标签页。最上方的所有管理 Permission 开关处于关闭状态,下面 14 个项目也全部关闭

创建 Space 时随附的 Administrator 角色

新建一个 Space 时,会自动随附一个名为 Administrator 的角色。这个角色是能够处理该 Space 内一切事务的最高权限角色。创建 Space 的人一开始就持有这个 Administrator 角色。

Administrator 角色是系统预设的角色,因此无法修改或删除。如果想缩小权限再给同事,就不要去改 Administrator,而是像下面这样另外创建一个新角色给他。

创建"商品上架负责"角色

现在就在服装店 Space 中,亲手创建一个要给同事的"商品上架负责"角色。这个角色对商品(Content)可以 Read、Create、Edit,但不能删除或发布。

  1. 在左侧菜单中点击 Roles & Permissions
  2. 点击列表右上方的 创建 按钮。
  3. Role 详情 标签页的名称栏中输入 商品上架负责。说明栏可以留空。

角色创建界面的 Role 详情标签页。名称栏中已输入"商品上架负责"的状态

接下来设定这个角色对商品(Content)能做的动作。动作以规则的形式,一行一行地放入 允许 列表,并在同一行一并选择要应用的范围(Content Type)。

  1. 切换到 Content 标签页。
  2. 点击 允许 下方的 +,添加一行规则。
  3. 在该行中把动作选为 Read,要应用的 Content Type 选为"商品"。(作者、Tag 栏保持"任意…"不变即对全体生效。)
  4. 用同样的方式再各添加一行 CreateEdit 规则。三行的 Content Type 都设为"商品"。
  5. 不要把删除(Delete)和发布(Publish)放入允许。没有放入允许的动作会被自动拒绝,因此同事无法删除或对外公开商品。

Content 权限标签页中,将 Read、Create、Edit 三条规则限定为"商品"并允许的状态

  1. 点击右上方的 保存 按钮。

当列表中出现 商品上架负责 时,角色就创建好了。它会与一开始就存在的 Administrator 一起显示。

Roles & Permissions 列表中同时显示"商品上架负责"和"Administrator"的界面

把创建好的角色给同事

创建好角色,并不意味着它会自动应用到某个人身上。创建好的角色必须套用到成员身上才会生效。

把同事分配到 Space 时,会一并选择其在该 Space 内将拥有的角色,这时选择刚刚创建的 商品上架负责 即可。如果同事已经在 Space 里,也可以在成员列表中更改该同事的角色来应用。还可以给一位成员同时赋予多个角色。这时各角色所允许的动作会全部合并,只要在任一角色中被允许的动作,该成员就能做。(拒绝优先于允许,只在同一个角色内部成立。即使某个角色拒绝了,只要另一个角色允许,那个动作就能做。)

把成员分配到 Space 并选择角色的具体步骤,在组织与空间中介绍。

接下来要做的事

  • 组织与空间:把同事分配到 Space,并套用刚刚创建的角色。
  • 令牌:介绍让外部网站或程序(而非人)能够读取或写入内容的访问令牌。这里创建的角色也可以套用到令牌上。套用到 Delivery Access Token 上时,角色决定该令牌的读取范围;套用到 Space Access Token 上时,则决定其读取和写入的范围。两种令牌的签发与管理权限是分开的,因此在上面的 Space 设置 列表中,也可以只开启其中一种。
  • API 参考:介绍在程序中直接创建角色或处理权限规则时所需的请求格式等技术规范。