具有部分读取权限的分支目录
Branching directory with partial read access
我有一个使用 authz 来控制访问的 svn 存储库。结构如下所示:
├── branches
│ └── bob
├── tags
└── trunk
└── A
├── B
│ └── README.txt
└── README.txt
假设 authz 授予用户对目录 A
但不是 B
的读取权限,并且当我尝试分支 A
:
时它失败了
[hidden]$ svn copy A ^/branches/bob/A1 -m 'Branching A to branches/bob/A1'
Adding copy of A
svn: E220001: Commit failed (details follow):
svn: E220001: Access denied
svnserve 的日志说
Authorization Failed recursive read /trunk/A
为什么 svn 有这个限制,有没有办法解决?为什么它不在分支时忽略B
,就像结帐一样?
如果事实证明这是不可能的,那么 svn 和 authz 的最佳工作流程是什么?貌似不可以分支,只能是大家都在trunk上干活,不过这也太傻了。
您对该用户具有子节点 B 的拒绝权限,并且拒绝权限覆盖读取权限。
当分支 A 时,B 不能被跳过(它在 A 内部,并且据 SVN 所知或关心,它是 A 的一部分)。这就是为什么你不能这样做。这实际上是一件好事,因为它会阻止您,因为您通常不希望分支错过源文件夹。
对此应该没有解决方法,这种行为实际上是有道理的。要使分支操作成功,您需要:
- 将 B 移到 A 之外
- 授予用户访问 A 及其下的所有内容
我知道在某些情况下这可能令人沮丧,但如果 B 不依赖于 A,或者如果从事 A 工作的人不关心 B 或需要访问 B - 在这种情况下案例 B 不应该真的在 A 里面。
SVN 的初始 authz 实现没有检查复制时的整个子树,但后来添加到地址 this security hole。
所以结论是,SVN 的 authz 从一开始就没有设计好,迟早会有很多 hacky 和肮脏的修复程序,最终导致您的用例不受支持。恕我直言,一个好的实现应该只跟踪从哪里复制分支并检查源的 authz。
我同意您的用例完全有效并且 Perforce 很好地支持基于路径的授权。不幸的是你不能在 svn 中做到这一点。您可以切换到 Perforce,或者等待他们 improve authz.
我有一个使用 authz 来控制访问的 svn 存储库。结构如下所示:
├── branches
│ └── bob
├── tags
└── trunk
└── A
├── B
│ └── README.txt
└── README.txt
假设 authz 授予用户对目录 A
但不是 B
的读取权限,并且当我尝试分支 A
:
[hidden]$ svn copy A ^/branches/bob/A1 -m 'Branching A to branches/bob/A1'
Adding copy of A
svn: E220001: Commit failed (details follow):
svn: E220001: Access denied
svnserve 的日志说
Authorization Failed recursive read /trunk/A
为什么 svn 有这个限制,有没有办法解决?为什么它不在分支时忽略B
,就像结帐一样?
如果事实证明这是不可能的,那么 svn 和 authz 的最佳工作流程是什么?貌似不可以分支,只能是大家都在trunk上干活,不过这也太傻了。
您对该用户具有子节点 B 的拒绝权限,并且拒绝权限覆盖读取权限。
当分支 A 时,B 不能被跳过(它在 A 内部,并且据 SVN 所知或关心,它是 A 的一部分)。这就是为什么你不能这样做。这实际上是一件好事,因为它会阻止您,因为您通常不希望分支错过源文件夹。
对此应该没有解决方法,这种行为实际上是有道理的。要使分支操作成功,您需要:
- 将 B 移到 A 之外
- 授予用户访问 A 及其下的所有内容
我知道在某些情况下这可能令人沮丧,但如果 B 不依赖于 A,或者如果从事 A 工作的人不关心 B 或需要访问 B - 在这种情况下案例 B 不应该真的在 A 里面。
SVN 的初始 authz 实现没有检查复制时的整个子树,但后来添加到地址 this security hole。
所以结论是,SVN 的 authz 从一开始就没有设计好,迟早会有很多 hacky 和肮脏的修复程序,最终导致您的用例不受支持。恕我直言,一个好的实现应该只跟踪从哪里复制分支并检查源的 authz。
我同意您的用例完全有效并且 Perforce 很好地支持基于路径的授权。不幸的是你不能在 svn 中做到这一点。您可以切换到 Perforce,或者等待他们 improve authz.