0

我正在使用在 Windows 7 下运行的 svnserve 1.4。我想通过使用 authz 文件来控制用户权限。

我想在根文件夹受读保护时授予子文件夹“rw”权限。我有一个大型存储库,并且只想为有限的文件子集授予“rw”权限。其他文件夹对用户是不可见的。

如果我使用以下配置,则不会显示任何内容:

[/root]
group1 =
[/root/A/new/Data]
group1 = rw
[/root/C/Ex/Files]
group1 = rw

如果我改为使用:

[/]
group1 = rw

然后所有文件夹都对“group1”可见,这不是我需要的。

另一种选择是做类似的事情

[root/B]
group1 =
[root/c]
group1 =

对于 group1 不需要的所有子文件夹。不过,我宁愿不必这样做。

4

2 回答 2

1

我正在使用在 Windows 7 下运行的 svnserve 1.4。

请注意,Subversion 1.4 不再受支持。您可能想要升级到版本 1.7.x 或 1.6.x。这些更高版本支持合并跟踪,这是一个不错的功能。升级现有存储库相当简单。

正如其他人指出的那样,如果您没有读取文件夹的权限,则您无权读取该文件夹的子文件夹。您可以对父文件夹设置只读权限,但如果您取消读取,用户将看不到您要授予读/写权限的子文件夹。

您可能需要重新考虑您的存储库布局。将存储库的读取权限授予一组选定的人并不罕见。例如,您可能不希望您的销售人员阅读您的源代码,但您确实希望您的开发人员阅读。我通常的做法是在每个存储库的基础上授予读/写权限,然后使用预提交挂钩来控制提交能力。有时一个目录包含您甚至不希望所有开发人员都看到的东西(例如您的私钥),并且只有一小部分开发人员应该看到。在这种情况下,我将其设为单独的存储库。


并不是所有的希望都消失了。您可以将您希望 group1 访问的目录放在靠近存储库根目录的另一个目录结构中。然后使用svn:externals您不希望 group1 中的用户看到的目录。

例如,像这样设置您的存储库:

[/root]
group1=

[/A/new/Data]
group1=rw

[C/Ex/Files]
group1=rw

然后把一套svn:externals放在/root包括A/new/DataC/Ex/Files结帐的时候/root

WORD 'O 警告:使用时要小心svn:externals。如果您将它们指向分支或树干的尖端,svn:external即使您标记/root. 使用svn:externals.

于 2012-08-09T17:48:15.603 回答
1

请注意,如果用户没有文件夹的读取权限,则他们无法访问该文件夹中的任何内容。如果没有读取权限,Subversion 无法知道其中是否有需要检查权限的文件或文件夹。拒绝读取访问将递归地隐藏文件夹及其中的所有内容。

如果您发现自己需要这种类型的细粒度访问控制,我强烈建议您重新评估您的存储库布局。/root如果像您这样的嵌套资源/root/A/new/Data需要如此截然不同的权限,那么它们在 repo 中的关系很可能无法反映它们在现实中的关系。很多时候,这样的事情最终会被重新组织到单独的项目(甚至单独的存储库)中,而不是嵌套的文件夹中,因此大多数细粒度的访问控制工作都会大大简化。

如果您不能在不破坏构建脚本等的情况下重新组织您的存储库,那么您可能需要考虑使用 Subversion 的svn:externals属性。您可以将 的内容移动/root/A/new/Data到单独的存储库中,并授予 group1 对其的完全访问权限。然后,您可以使用svn:externals将新的存储库路径拉入/root相同文件夹名称下的文件夹中,以便那些有权访问的人/root在执行时看到相同的内容svn checkout。当子文件夹的内容类似于由外部团队提供的库时,这种工作流程很有用。您需要让图书馆团队访问图书馆代码(他们可以通过直接访问图书馆的存储库来获得),但他们不需要访问您的其余代码。

于 2012-08-09T16:56:41.357 回答