如何在SVN中设置访问控制?

时间:2008-09-17 09:12:17

标签: svn authorization svn-administraton

我已经使用SVN和上传项目建立了一个存储库。有多个用户在处理这些项目。但是,并非所有人都在处理所有项目并需要访问权限。我想为用户设置每个项目的权限。

我如何实现这一目标?

7 个答案:

答案 0 :(得分:82)

svn \ repos \ YourRepo \ conf 文件夹中,您会找到两个文件, authz 密码。这些是你需要调整的两个。

passwd 文件中,您需要添加一些用户名和密码。我假设你已经完成了这个,因为你有人使用它:

[users]
User1=password1
User2=password2

然后,您希望使用 authz 文件相应地分配权限:

创建所需的概念组,并将人员添加到其中:

[groups]
allaccess = user1
someaccess = user2

然后从权限和项目级别选择他们拥有的访问权限。

因此,让我们的“所有访问”人员都可以从根目录访问:

[/]
@allaccess = rw

但是只给我们的“一些访问”人员只读访问一些较低级别的项目:

[/someproject]
@someaccess = r

您还可以在 authz passwd 文件中找到一些简单的文档。

答案 1 :(得分:27)

@Stephen Bailey

要完成答案,您还可以通过存储库中的纯文本文件将用户权限委派给项目经理。

为此,您需要使用包含以下内容的默认authz文件设置SVN数据库。

###########################################################################
# The content of this file always precedes the content of the
# $REPOS/admin/acl_descriptions.txt file.
# It describes the immutable permissions on main folders.
###########################################################################
[groups]
svnadmins = xxx,yyy,....

[/]
@svnadmins = rw
* = r
[/admin]
@svnadmins = rw
@projadmins = r
* =

[/admin/acl_descriptions.txt]
@projadmins = rw

此默认authz文件授权SVN管理员修改SVN存储库中名为'/ admin / acl_descriptions.txt'的普通可见文本文件,SVN管理员或项目经理将修改和注册用户。

然后设置一个预提交钩子,它将检测修订是否由该文件组成(并且只包含该文件)。

如果是,这个钩子脚本将验证纯文本文件的内容,并检查每一行是否符合SVN正确的语法。

然后,提交后挂钩将使用以下连接更新\conf\authz文件:

  • 上面显示的TEMPLATE authz文件
  • 纯文本文件/admin/acl_descriptions.txt

第一次迭代由SVN管理员完成,他补充道:

[groups]
projadmins = zzzz

他提交了修改,并更新了authz文件。

然后项目经理'zzzz'可以添加,删除或声明任何用户组和他想要的任何用户。 他提交文件并更新authz文件。

这样,SVN管理员不必关注所有SVN存储库的所有用户

答案 2 :(得分:26)

一个让我感到困惑的问题:

[repos:/path/to/dir/] # this won't work

[repos:/path/to/dir]  # this is right

您不需要在目录中包含尾部斜杠,或者您将看到403的OPTIONS请求。

答案 3 :(得分:8)

您可以使用svn + ssh:,然后它基于对给定位置的存储库的访问控制。

这是我在我的Uni上托管项目组存储库的方式,我无法在其中设置任何其他内容。只需拥有该组拥有的目录,并在其中运行svn-admin(或其他任何内容)意味着我不需要进行任何配置。

答案 4 :(得分:5)

虽然我建议Apache方法更好,但SVN服务工作正常并且非常简单。

假设您的存储库名为“my_repo”,并且存储在c:\ svn_repos中:

  1. 在“C:\ svn_repos \ my_repo \ conf”中创建一个名为“passwd”的文件。此文件应如下所示:

    [Users]
    username = password
    john = johns_password
    steve = steves_password
    
  2. 在c:\ svn_repos \ my_repo \ conf \ svnserve.conf中设置

    [general]
    password-db = passwd
    auth-access=read
    auth-access=write
    
  3. 这将强制用户登录以读取或写入此存储库。

    对每个存储库执行以下步骤,仅在每个存储库的passwd文件中包含相应的用户。

答案 5 :(得分:3)

最好的方法是设置Apache并通过它设置访问权限。查看svn book以获取帮助。如果您不想使用Apache,您还可以使用svnserve进行简约访问控制。

答案 6 :(得分:0)

Apache Subversion支持path-based authorization,可帮助您为存储库(文件或目录)路径上的用户帐户和组帐户配置精细权限。基于路径的授权支持三种访问级别-无访问权限,只读和读/写。

基于路径的授权权限使用特殊语法存储在每个存储库或每个服务器的授权文件中。这是SVNBook的示例:

[calc:/branches/calc/bug-142]
harry = rw
sally = r

当您需要具有许多路径和帐户的复杂权限结构时,可以受益于VisualSVN Server提供的基于GUI的权限管理工具:

  • 服务器管理员可以通过VisualSVN服务器管理器控制台或PowerShell管理用户和组权限,
  • 非管理员用户可以通过RepoCfg管理权限。

VisualSVN服务器管理器中的存储库权限 enter image description here

PowerShell中的存储库权限 enter image description here

非管理员用户可以通过RepoCfg工具管理权限 enter image description here