角色与权限
假设你把同事 minji.kim@example.com 加入了服装店商城的 Space。你想把上架和修改商品的工作交给这位同事,但要把删除商品或对外公开商品的工作也交出去,就会让人有些不放心。像这样,把"一个 Space 内成员能做什么、不能做什么"事先定好的权限组合,就是 SpaceRole。
SpaceRole 不是给每一位成员单独配置权限,而是先做好一组权限,再把它套用到成员身上。例如,只要做好一个"只能阅读和修改商品"的角色,把这一个角色套用到负责上架商品的同事身上即可。即使成员越来越多,也不必每次从头配置权限。
本页先介绍 SpaceRole 是什么、能包含哪些权限,然后在服装店 Space 中亲手创建一个"商品上架负责"角色。
Space 角色与 Organization 角色不同
WEEGLOO 中有两处地方用来设定权限。这两者容易混淆,所以先划清界限。
- Organization 角色(Owner、Admin、Member)是在整个公司层面的等级。它决定谁可以做横跨整个 Organization 的事,比如邀请成员或新建 Space。
- SpaceRole 是某一个 Space 内部的权限。它决定成员在进入该工作空间后,处理内容的工作能做到什么程度,比如创建商品、修改商品、发布商品。
即使是同一位同事,也可以在不同的 Space 中给予不同的 SpaceRole。比如在商城 Space 中允许其修改商品,而在公司公告用的 Space 中只允许其阅读。本页只讲 SpaceRole。Organization 角色以及成员的邀请与分配,请参阅组织与空间。
角色中包含的内容:对什么,做什么动作
一个 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 的:只对带有指定 Tag 的 Content 或 Media 生效。
如果不另行缩小范围,该动作就会对相应对象的全体生效。例如,不缩小地允许阅读 Content,就能阅读所有 Content;缩小到"商品" Content Type,就只能阅读商品。
Tag 是什么,请参阅 Tag。
Script 执行与管理权限
SpaceRole 除了前面这三种对象之外,还包含对 Script 的权限。Script 是前端调用的、无需服务器代码就能创建的后端端点(参阅 Script)。这里有一个 Content、Media 所没有的 Execute(执行)动作。
- Execute:让其能够执行(调用)该 Script。前端或注册会员想要调用 Script,就需要这项权限。
- Read、Create、Edit、Delete:查看、创建、修改、删除 Script 的管理权限。
可以按作者缩小到"只限自己创建的 Script"。这里没有发布动作,因为 Script 不是需要发布的资源。对于注册了产品的会员(ServiceUser),通常只开放 Execute。因为创建和修改 Script 的编写工作,由内容工作室的使用者负责。

权限规则的确切格式,在 SpaceRole、ServiceUserRole 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 时,还需要同时具备它要执行的那个 Script 的 Execute 权限(参阅以谁的权限运行)。
如果一个项目都不开启,这个角色就成了只处理内容的角色。后面要创建的"商品上架负责"角色就是这种情况。它可以上架和修改商品,但完全动不了 Space 设置。

创建 Space 时随附的 Administrator 角色
新建一个 Space 时,会自动随附一个名为 Administrator 的角色。这个角色是能够处理该 Space 内一切事务的最高权限角色。创建 Space 的人一开始就持有这个 Administrator 角色。
Administrator 角色是系统预设的角色,因此无法修改或删除。如果想缩小权限再给同事,就不要去改 Administrator,而是像下面这样另外创建一个新角色给他。
创建"商品上架负责"角色
现在就在服装店 Space 中,亲手创建一个要给同事的"商品上架负责"角色。这个角色对商品(Content)可以 Read、Create、Edit,但不能删除或发布。
- 在左侧菜单中点击 Roles & Permissions。
- 点击列表右上方的 创建 按钮。
- 在 Role 详情 标签页的名称栏中输入
商品上架负责。说明栏可以留空。

接下来设定这个角色对商品(Content)能做的动作。动作以规则的形式,一行一行地放入 允许 列表,并在同一行一并选择要应用的范围(Content Type)。
- 切换到 Content 标签页。
- 点击 允许 下方的 +,添加一行规则。
- 在该行中把动作选为 Read,要应用的 Content Type 选为"商品"。(作者、Tag 栏保持"任意…"不变即对全体生效。)
- 用同样的方式再各添加一行 Create、Edit 规则。三行的 Content Type 都设为"商品"。
- 不要把删除(Delete)和发布(Publish)放入允许。没有放入允许的动作会被自动拒绝,因此同事无法删除或对外公开商品。

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

把创建好的角色给同事
创建好角色,并不意味着它会自动应用到某个人身上。创建好的角色必须套用到成员身上才会生效。
把同事分配到 Space 时,会一并选择其在该 Space 内将拥有的角色,这时选择刚刚创建的 商品上架负责 即可。如果同事已经在 Space 里,也可以在成员列表中更改该同事的角色来应用。还可以给一位成员同时赋予多个角色。这时各角色所允许的动作会全部合并,只要在任一角色中被允许的动作,该成员就能做。(拒绝优先于允许,只在同一个角色内部成立。即使某个角色拒绝了,只要另一个角色允许,那个动作就能做。)
把成员分配到 Space 并选择角色的具体步骤,在组织与空间中介绍。
