Wiki
权限
为群组或用户授予对仓库文件夹的 read / write / none 访问权限。模式、优先级、默认解析、权限测试。
简介
Permissions 选项卡为指定的仓库定义谁可以读取或写入哪些文件夹。 权限的对象是 一个群组或一个用户,适用于某个 路径模式, 并带有一个 级别(write / read / none)。角色说明一个账户能做什么,权限说明 针对哪些文件。
访问与角色
此选项卡对 超级管理员(所有仓库)和 project_admin (其管理的仓库)开放。规则始终附加到所选仓库。
三个级别
| 级别 | 效果 |
|---|---|
write | 对所覆盖路径的读取和写入(检出、签入)。 |
read | 只读: 可以同步,不能修改。 |
none | 无访问权限: 即使有更宽泛的规则允许,也会显式隐藏某个文件夹。 |
授予访问权限
- 选择仓库,然后打开 Permissions 选项卡。
- 在选择器中选择 对象: 一个群组 或 一个用户("Groups"和"Users" 两个子列表)。一条规则只针对其中之一,绝不同时针对两者。
- 在 文件夹树 中勾选相关文件夹(复选框有三种状态: 全部 / 部分 / 无)。搜索框可筛选树。
- 在出现的栏中选择级别(
write/read/none), 然后点击 Apply。
对象的活动规则显示在一个表格(模式、级别、优先级)中,你可以逐条删除。
按用户名授予
"+ By username" 按钮可让你为未出现在可见列表中的人授予访问权限,方法是输入其
准确的名称。这是为通常范围之外的账户授予访问权限的方式,例如尚未持有任何权限的
playtester。
名称必须 完全匹配(不支持前缀)。该字段只返回标识符和名称,绝不返回角色, 以免被用来探测现有账户。
模式与优先级
勾选的文件夹 Foo/Bar 会成为模式 Foo/Bar/**(该文件夹及其在任意深度包含的
全部内容)。仓库根目录会成为 /**。
每条规则会自动获得一个 等于文件夹深度的优先级(段数,根 = 0)。
因此更 具体(更深)的规则会优先于更一般的规则。
例如: 在 Content/** 上设 write,在 Content/Secret/** 上设 none,
则在 Content/ 中处处可写,唯独 Secret/ 除外。
Parent/**
(也覆盖未来的子文件夹),并删除变得多余的子规则。
默认解析
当没有显式规则覆盖某个路径时,有效访问遵循以下模型:
- 默认情况下,当没有规则匹配时,访问为 read(读取)。
admin和lead处处拥有 write(角色绕过)。project_admin在 其管理的仓库上拥有 write,在其他地方没有特殊权限。- 否则,应用最具体的规则;若都不匹配,则为默认读取。
换句话说: 要 禁止 某人读取某个文件夹,仅仅不授予任何权限是不够的(默认是 read),
需要一条显式的 none 规则。
测试权限
Test Permission 面板回答「该用户对此路径拥有什么有效访问权限?」。
选择一个用户,输入一个路径(例如 /Content/Maps/Level01.umap)并运行测试。
结果会显示有效级别,以及做出判定的 来源 和 模式,
从而让你理解为何授予或拒绝访问。
对于你无权查看的用户,测试返回与不存在账户相同的「未找到」,以免泄露账户的存在。
常见陷阱
「我什么都没授予,他却能读取」
这是 read 默认值。要关闭某个文件夹,请在其上放置一条显式的 none 规则。
两条规则相互矛盾
最具体的那条(深度最大)获胜。用 测试 查看是哪一条在决定。
尽管有 none 规则,lead 仍保持可写
admin 和 lead 角色会绕过路径规则(处处 write)。none
规则不会限制它们。project_admin 对其自己的仓库也是如此。
通过群组访问与直接访问
访问可能来自账户本身,也可能来自其所属的 群组。如果 删除一条规则没有任何变化,请查找另一个来源(测试会指明是哪一个在起作用)。