我该如何阻止Subversion用户访问仓库的一部分?

10
我正在为一个项目使用由Dreamhost托管的Subversion存储库。
我想在有限的范围内允许一些用户访问。至少,我想允许一些用户只读访问,但理想情况下,我希望防止一些用户完全看到存储库的某些部分。我在Subversion的网页文档中没有找到关于用户权限的说明,尽管我认为它应该存在?
我习惯于使用Perforce,所以我想要的是类似于Perforce中的p4 protect的功能。
谢谢。
6个回答

12

请查看conf/目录下的authz文件。您可以针对特定用户和特定目录设置权限。在svnserve.conf中,您可以指定是否允许匿名用户读取访问权限。

这是我的一个存储库的示例:

[groups]
project1_team = dave, john, andy

[/]
* =
dave = rw

[/project1]
@project1_team = rw

[/project2]
andy = r

这里发生的事情是,我定义了一组用户可以完全访问project1;dave(也就是我)对整个代码库拥有完全访问权限,而andy只能以只读方式访问project2。


请注意,如果您正在使用Apache的mod_dav_svn,则必须在您的dav_svn.conf中设置“AuthzSVNAccessFile <path to authz>”。 - fishbone

3
在Web主机上,通常会有一个配置文件(可以命名为任何文件名)来运行授权。每个存储库都有像这样的列表
[my-repository:/]
myuser = rw

这将在整个存储库上授予'myuser'读写权限。你也可以这样做:

[my-repository/just-this-folder/:]
somejerk: r

这应该是你想要的。


2
如果您同时使用SVN和Apache,请按照以下步骤进行操作:
请注意,您可以管理的最佳权限级别将以每个仓库为基础。假设您有repository1和repository2。
1- 在单独的文件中为每个仓库创建相应的用户:
sudo htpasswd -c -m /etc/apache2/dav_svn_REPOSITORY1.passwd $user_name_for_repository1
 sudo htpasswd -c -m /etc/apache2/dav_svn_REPOSITORY2.passwd $user_name_for_repository2

如果您想在每个文件中添加更多用户,请从命令中删除“-c”,因为它只用于第一次创建文件。
2-编辑以下文件:
nano /etc/apache2/mods-available/dav_svn.conf

你将会拥有一个像这样的部分:

您将拥有类似于此的部分:

<Location /svn>
  SVNPath $your svn repository path
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  Require valid-user
  SSLRequireSSL
</Location>

对于每个存储库,请复制此代码块,对于我们的情况,您需要再复制一次。现在,删除上面的代码块,并添加以下代码块,这些代码块是上面代码块的修改副本:

<Location /svn/repository1>
  SVNPath $your svn repository1 path
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn_REPOSITORY1.passwd
  Require valid-user
  SSLRequireSSL
</Location>
<Location /svn/repository2>
  SVNPath $your svn repository2 path
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn_REPOSITORY2.passwd
  Require valid-user
  SSLRequireSSL
</Location>

3- 保存文件并重新启动Apache。


0

我不熟悉Dreamhost使用的具体配置,但实施权限的典型方式是使用Apache身份验证机制。这里是Subversion文档相关页面


0

Subversion Book 已经为你提供了答案就在这里

说真的,各位:在纠缠别人之前,阅读基本文档已经过时了吗?


0

请参考上面的被接受的答案。然而,对于Dreamhost特定情况,在~/svn目录下每个仓库都有两个文件repo_name.accessrepo_name.passwd。其中repo_name是您给仓库起的名字。您可以按照被接受的答案中所述编辑repo_name.access文件。

别忘了在编辑后执行chmod 644 repo_name.access以便apache能够访问它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接