uVersion
简体中文
下载 →

Wiki

权限

为群组或用户授予对仓库文件夹的 read / write / none 访问权限。模式、优先级、默认解析、权限测试。

简介

Permissions 选项卡为指定的仓库定义谁可以读取或写入哪些文件夹。 权限的对象是 一个群组或一个用户,适用于某个 路径模式, 并带有一个 级别(write / read / none)。角色说明一个账户能做什么,权限说明 针对哪些文件。

访问与角色

此选项卡对 超级管理员(所有仓库)和 project_admin (其管理的仓库)开放。规则始终附加到所选仓库。

选项卡的三个面板

Permissions 选项卡位于管理面板的 PROJECT 行: 你在这里所做的一切仅对 行首选择器中显示的仓库生效。正上方的 SERVER 行则相反,关乎整个服务器,账户和群组就存放在那里。

此选项卡自上而下叠放着 三个不同的面板。它们回答三个不同的问题,把前两个与文件夹树混淆,是 本页最常见的求助原因。

面板它回答的问题谁可以访问
Project Admins谁管理这个项目?仅超级管理员
Build Access谁可以下载这个项目的构建?超级管理员和 project_admin
权限树谁可以读取或写入哪些文件夹?超级管理员和 project_admin
从顶部看到的 Permissions 选项卡,三个面板叠放并已填充: 列出一位项目管理员的 Project Admins、列出一项已授予访问权限的 Build Access,随后是权限树的开头。上方可见 PROJECT 行及其仓库选择器。

本页余下部分先介绍作为主面板的权限树,再介绍另外两个。

三个级别

级别效果
write对所覆盖路径的读取和写入(检出、签入)。
read只读: 可以同步,不能修改。
none无访问权限: 即使有更宽泛的规则允许,也会显式隐藏某个文件夹。

授予访问权限

1. 在正确的项目上打开 Permissions 选项卡

PROJECT 行,行首的仓库选择器: 在做任何事之前先核对显示的项目,规则将只附加到它。

2. 选择对象

在选择器中选取一个群组 或 一个用户: 列表分为 Groups 和 Users 两个子列表。一条规则针对其中之一,绝不同时针对两者。只要未选择对象,Apply 按钮就保持禁用。

3. 勾选文件夹

在 文件夹树 中勾选相关文件夹。复选框为三态(全部、部分、无),Filter folders... 字段在项目较大时可缩减树。

4. 选择级别并应用

一旦勾选了文件夹便会出现一个栏: 它会显示所选文件夹的数量,并提供三个级别(write、 read、none)。选一个,然后点击 Apply。对象的规则随即显示在下方的 Active rules 表格(Path Pattern、Permission、Priority)中,你可以 逐条删除。

勾选了多个文件夹的文件夹树、左上角的对象选择器、显示所选文件夹数量的栏及 write、read、none 药丸和右侧的 Apply 按钮,随后是 Active rules 表格及其 Path Pattern、Permission、Priority 列。

按用户名授予

"+ By username" 按钮可让你为未出现在可见列表中的人授予访问权限,方法是输入其 准确的名称。这是为通常范围之外的账户授予访问权限的方式,例如尚未持有任何权限的 playtester。

名称必须 完全匹配(不支持前缀)。该字段只返回标识符和名称,绝不返回角色, 以免被用来探测现有账户。

模式与优先级

规则针对的不是某个具体文件,而是一个 路径模式,即所谓的 glob: 一种简写记法, 其中 * 代表名称中任意的字符序列,** 代表任意深度的任意文件夹序列。因此 Content/Maps/** 表示 Content/Maps 之下的一切,包括子文件夹。你无需手写它们: 在树中 勾选一个文件夹即会生成对应的 glob。

勾选的文件夹 Foo/Bar 会成为模式 Foo/Bar/**(该文件夹及其在任意深度包含的 全部内容)。仓库根目录会成为 /**。

每条规则会自动获得一个 等于文件夹深度的优先级(段数,根 = 0)。 因此更 具体(更深)的规则会优先于更一般的规则。 例如: 在 Content/** 上设 write,在 Content/Secret/** 上设 none, 则在 Content/ 中处处可写,唯独 Secret/ 除外。

自动归组 如果你勾选某个文件夹的所有子项,客户端会将它们归为单条规则 Parent/** (也覆盖未来的子文件夹),并删除变得多余的子规则。

默认解析

当没有显式规则覆盖某个路径时,有效访问遵循以下模型:

  • 默认情况下,当没有规则匹配时,访问为 read(读取)。
  • admin 和 lead 处处拥有 write(角色绕过)。
  • project_admin 在 其管理的仓库上拥有 write,在其他地方没有特殊权限。
  • 否则,应用最具体的规则;若都不匹配,则为默认读取。

换句话说: 要对 已经能访问仓库 的人 禁止 读取某个文件夹,仅仅不授予任何权限是 不够的(默认是 read),需要一条显式的 none 规则。

默认 read 针对文件夹,而非仓库 默认 read 回答的是「此人已能访问的仓库内部的这条路径」。它不会让任何仓库公开。一个对某仓库 没有 任何 none 以外规则的账户(无论是直接还是通过群组),根本看不到该仓库: 它既不出现 在其仓库列表中,也不出现在其工作区中,服务器路由也会拒绝它。

实际后果,且能省去无用功: 一个没有任何规则的全新项目已经对所有人关闭,除了 admin 和 lead 角色以及它自己的 project_admin。因此不必到处放置 none 规则来「关闭」一个项目; 只需授予你想开放的部分即可。none 规则用于在一个已授予的访问 内部 进行切分,例如对拥有 Content/ 的团队隐藏 Content/Secret/。

指定项目管理员

选项卡顶部的 Project Admins 面板指定谁管理所选仓库。它 仅限超级管理员: 授予 权限比行使权限高一级。

过程分两步,按此顺序:

1. 在 Users 选项卡中赋予角色

SERVER 行,Users 选项卡: 给此人赋予 project_admin 角色。只要未 设置该角色,此人就不会出现在本面板的列表中,面板也会这样提示: 「No one to add. Give someone the Project Admin role on the Users tab first」。

2. 将此人关联到仓库

回到这里,核对 PROJECT 行选择器中显示的仓库,然后在 Project Admins 面板点击 Add, 选择此人并点击 Grant。此人随即出现在面板列表中。

正在添加的 Project Admins 面板: Grant 按钮旁的 Select a project admin 菜单,下方是一位已关联的人员,随后是 granted by 说明和红色的 Revoke 叉号。

移除关联

行末的红色叉号(Revoke)会将该仓库移出其范围。没有关联的角色 什么都不给: 一个 不再管理任何仓库的 project_admin 会失去对 Permissions、Rules、Webhooks、Files 以及用户管理的访问。因此移除 最后一个仓库确实会连同全部权限一起移除。

构建访问

Build Access 面板决定谁可以从客户端的 Games 页面查看并下载这个项目的 已发布构建。 它向 超级管理员 以及在其仓库上的 project_admin 开放。

这是向 playtester 开放一个项目的唯一途径 playtester 账户按设计 不持有任何路径权限: 这正是它看不到项目文件的原因。因此它不 出现在任何权限树中,你也无法通过树「给它访问权限」。Build Access 面板正是为此而设: 它 不 给予 文件访问权限,却给予构建访问权限。

1. 打开添加表单

在 Build Access 面板点击 Add。会出现一行输入,首先从选择如何指定目标开始。

2. 指定目标

  • User: 列表中的一个账户,也就是已经在该项目上工作的人。
  • Group: 整个 群组,便于一届学生或一个经常性的测试团队。
  • By username: 一个 Exact username 字段,你在其中输入账户的准确名称。这是 playtester 的常规途径,因为它不出现在任何列表中。名称必须准确匹配,不带前缀。
正在添加的 Build Access 面板: 类型菜单设为 By username,已填写的 Exact username 字段,右侧的 Grant 按钮,下方是一行已授予的记录及其红色移除叉号。

3. 授予或撤销

点击 Grant 以授予。在已有的一行上,Revoke 会在确认后移除该访问。

服务器按顺序应用的规则:

谁构建访问
admin所有仓库。
project_admin其管理的仓库。
所有其他角色必须持有 download_builds 能力(除 viewer 外所有角色都 持有),并且 要么能访问该仓库,要么在此面板中有一条记录,无论是直接的还是通过群组。

换句话说: 已经在该项目上工作的人在这里无需任何额外设置。此面板服务于项目 之外 的人,而 viewer 在任何情况下都被排除。

测试权限

选项卡最底部的 Test Permission 面板回答「该用户对此路径拥有什么有效访问权限?」。这是了解你的 哪条规则真正起决定作用的最短途径。

1. 选择用户和路径

在 User 中选取一个账户,然后在 Path 中输入一个路径,例如 /Content/Maps/Level01.umap。只要两者未填写,按钮就保持禁用。

2. 运行测试并阅读结果

点击 Test。结果会显示有效级别,以及做出判定的 来源 和 模式, 从而让你理解为何授予或拒绝访问。

Test Permission 面板,其结果显示有效级别以及做出判定的来源和模式。

对于你无权查看的用户,测试返回与不存在账户相同的「未找到」,以免泄露账户的存在。

常见陷阱

「我什么都没授予,他却能读取」

这是 read 默认值,它只在 此人已能访问的仓库内部 起作用。要对在项目上工作的人关闭 某个文件夹,请在其上放置一条显式的 none 规则。

「仓库不出现在他的列表中」

只要他对这个仓库 没有 任何 none 以外的规则,这就是正常的。read 默认值 并不给予对仓库本身的访问。直接或通过 群组 给他至少一条 read 或 write 规则,仓库便会出现。如果这是一个只需获取构建的 playtester,那么不该在这里处理: 参见 构建访问。

两条规则相互矛盾

最具体的那条(深度最大)获胜。用 测试 查看是哪一条在决定。

尽管有 none 规则,lead 仍保持可写

admin 和 lead 角色会绕过路径规则(处处 write)。none 规则不会限制它们。project_admin 对其自己的仓库也是如此。

通过群组访问与直接访问

访问可能来自账户本身,也可能来自其所属的 群组。如果 删除一条规则没有任何变化,请查找另一个来源(测试会指明是哪一个在起作用)。