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. 选择对象

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

3. 勾选文件夹

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

4. 选择级别并应用

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

勾选了多个文件夹的文件夹树、左上角的对象选择器、显示所选文件夹数量的栏及 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(读取)。
  • adminlead 处处拥有 write(角色绕过)。
  • project_admin其管理的仓库上拥有 write,在其他地方没有特殊权限。
  • 否则,应用最具体的规则;若都不匹配,则为默认读取。

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

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

实际后果,且能省去无用功: 一个没有任何规则的全新项目已经对所有人关闭,除了 adminlead 角色以及它自己的 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 默认值 并不给予对仓库本身的访问。直接或通过 群组 给他至少一条 readwrite 规则,仓库便会出现。如果这是一个只需获取构建的 playtester,那么不该在这里处理: 参见 构建访问

两条规则相互矛盾

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

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

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

通过群组访问与直接访问

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