如何防止subversion用户访问存储库的一部分?

时间:2009-02-18 20:44:33

标签: svn permissions version-control perforce

我正在使用Dreamhost上托管的Subversion存储库来创建项目。

我想允许限制访问某些用户。至少我想允许对某些用户进行只读访问,但理想情况下我想阻止一些用户看到存储库的某些部分。我找不到Subversion的web文档中提到的用户权限,虽然我认为它存在?

我习惯使用Perforce,所以我想要的是p4 protect对Perforce的作用。

感谢。

6 个答案:

答案 0 :(得分:12)

查看conf /目录中的authz文件。您可以为特定用户和特定目录设置权限。在svnserve.conf中,您可以指定匿名用户是否具有读取权限。

以下是我的存储库中的一个示例:

[groups]
project1_team = dave, john, andy

[/]
* =
dave = rw

[/project1]
@project1_team = rw

[/project2]
andy = r

这里发生的事情是我定义了一组具有project1完全访问权限的用户; dave(碰巧是我)拥有对整个存储库的完全访问权限,而andy具有对project2的只读访问权。

答案 1 :(得分:3)

在Web主机上,通常会有一个配置文件(可以命名为任何内容)来运行authorization。每个存储库都有一个类似于的列表 [我的仓库:/]
myuser = rw

哪会给'myuser'读一读&对整个存储库的写权限。你也可以这样做:

[我的存储库/刚刚此文件夹/:]
somejerk:r

哪个应该做你想做的事。

答案 2 :(得分: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。

答案 3 :(得分:0)

我不熟悉Dreamhost使用的特定配置,但执行权限的典型方法是使用Apache身份验证机制。这是Subversion文档中的relevant page

答案 4 :(得分:0)

Subversion Book的答案为right here

说真的,人们:在纠缠其他人之前,什么时候才能读出最基本的文档呢?

答案 5 :(得分:0)

请参阅上面接受的答案。但是,对于Dreamhost细节,在〜/ svn目录中,每个存储库repo_name.accessrepo_name.passwd都有两个文件。其中repo_name是您为存储库提供的名称。您可以按照接受的答案中的说明编辑repo_name.access文件。

编辑后不要忘记chmod 644 repo_name.access,以便apache可以访问它。