快速的背景。 我们在没有networking访问权的Windows机器上运行Subversion Server 1.6.5(没有Apache就是SVN服务器)。 我们只使用TortoiseSVN和AnkhSVN,为了持续集成,我们使用svn客户端命令行。
好的,所以我在NET上看了一下,看了一下SVN书,我不明白为什么这个用户设置不起作用。
authz(SVN授权文件)内容:
### Sanitized version [groups] devUsers = user1 qaUsers = user2 [/] @devUsers = r @qaUsers = r [/Dev/SourceCode] @devUsers = rw ~devUsers = ### QA Projects [/Dev/testCases] @qaUsers = rw ~qaUsers =
从我读过的,你必须授予所有用户至less读取存储库根目录的权限。 好的。 这样可行。 接下来,我的/ Dev / SourceCode目录应该只能被@devUsers访问,但由于某种原因,在TortoiseSVN的repo浏览器中, @qaUsers可以看到这个文件夹。 我猜全局读取访问/是否覆盖authz文件中的~devUsers =行? 同样的,/ dev / TestCases文件夹只能被@qaUsers访问,而@devUsers也可以查看这个文件夹。 这是我的问题之一。
主要的问题是/ Dev / SourceCode的子文件夹只能读取。 我知道这一点,因为当我试图检查到一个子文件夹中的东西说授权失败。 但是,在根文件夹中,如果您签入文件,它可以正常工作。
我猜这是/只读访问重写的东西再次。 这是否意味着每个子文件夹都必须有明确的权限? 无论如何,从这一点上说,使用当前父文件夹的权限,即/ Dev / SourceCode的权限。 这看起来真的很不方便,如果你想授予rw权限到所有子文件夹,当有许多子文件夹。
当我看到你的授权文件时,我最初的想法是,“不是从path声明中缺less的存储库名称?
我的意思是,
[/Dev/SourceCode] @devUsers = rw @qaUsers =
应该看起来像,
[<repo-name>:/Dev/SourceCode] @devUsers = rw @qaUsers =
或者,如果“Dev” 是存储库的名称,
[Dev:/SourceCode] @devUsers = rw @qaUsers =
我用我们的仓库的Apache,但语法看起来是相同的,无论是httpd或svnserve: 基于path的授权
我希望这有帮助。
谢谢,
扎卡里
权限的级联应该按照您的预期工作; 每个目录都不需要权限。 您只需要指定更具体的path来覆盖来自父级的权限,就像您正在做的那样。
我不熟悉~groupname语法。 你明确的意思是否定(用户不在组中),但我不确定是否支持。 尝试这样的事情(你的前两个部分为组defs和根访问相同):
[/Dev/SourceCode] @devUsers = rw @qaUsers = [/Dev/testCases] @qaUsers = rw @devUsers =
这应该可行,虽然否认你的开发人员访问testing案例让我感到难过。
编辑:既然你已经试过这个,它不工作…也许尝试扭转顺序? 匹配应该发生在最特定的最不具体的,所以顺序应该不重要,但我至less会尝试把这些在文件比[/]权限。 如果这有所作为,那么我会怀疑你的服务器版本的错误。
完全分开的想法从我的其他答案:
…你确定[/ Dev / testCases]定义中没有错字(例如,case) (你在Windows上:我知道如果Windows实际上被命名为'DEV',Windows会显示为'Dev',但是SVN可能会关心)
还有,你确定它不应该是[/ trunk / Dev / testCases]什么的?