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

时间:2020-03-05 18:58:22  来源:igfitidea点击:

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

我该如何实现?

解决方案

回答

最好的方法是设置Apache并通过它设置访问权限。查看svn书籍以寻求帮助。如果我们不想使用Apache,也可以使用svnserve进行简约的访问控制。

回答

在svn \ repos \ YourRepo \ conf文件夹中,我们将找到两个文件authz和passwd。这是我们需要调整的两个。

在passwd文件中,我们需要添加一些用户名和密码。我想我们已经有人使用它了,所以我们已经做到了:

[users]
User1=password1
User2=password2

然后,我们要使用authz文件相应地分配权限:

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

[groups]
allaccess = user1
someaccess = user2

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

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

[/]
@allaccess = rw

但是,仅向我们的"某些访问权"人员授予对某些较低级项目的只读访问权:

[/someproject]
@someaccess = r

我们还将在authz和passwd文件中找到一些简单的文档。

回答

尽管我建议使用Apache方法更好,但是SVN Serve可以很好地工作并且非常简单。

假设存储库名为" my_repo",并且存储在c:\ svn_repos中:

  • 在" C:\ svn_repos \ my_repo \ conf"中创建一个名为" passwd"的文件。该文件应如下所示:
[Users]
username = password
john = johns_password
steve = steves_password
  • 在c:\ svn_repos \ my_repo \ conf \ svnserve.conf中设置
[general]
password-db = passwd
auth-access=read
auth-access=write

这将迫使用户登录以读取或者写入此存储库。

对每个存储库执行以下步骤,仅在每个存储库的" passwd"文件中包括适当的用户。

回答

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

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

回答

@斯蒂芬·贝利

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

为此,请使用包含以下内容的默认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文件:

  • 上面提供的TEMPLATEauthz文件
  • 纯文本文件/ admin / acl_descriptions.txt

他补充说:第一次迭代是由SVN管理员完成的。

[groups]
projadmins = zzzz

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

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

这样,SVN管理员不必跟踪所有SVN存储库的任何用户。

回答

一个使我迷惑的陷阱:

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

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

我们无需在目录中包含斜杠,否则OPTIONS请求将显示403.