85

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

我怎样才能做到这一点?

4

7 回答 7

88

在您的svn\repos\YourRepo\conf文件夹中,您会找到两个文件,authzpasswd。这是您需要调整的两个。

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

[users]
User1=password1
User2=password2

然后你想用authz文件相应地分配权限:

创建您想要的概念组,并向其中添加人员:

[groups]
allaccess = user1
someaccess = user2

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

所以让我们给我们的“所有访问权限”的人从根目录所有访问权限:

[/]
@allaccess = rw

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

[/someproject]
@someaccess = r

您还将在authzpasswd文件中找到一些简单的文档。

于 2008-09-17T09:29:50.300 回答
28

@斯蒂芬·贝利

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

为此,您使用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 语法。

然后一个 post-commit 钩子将使用以下连接\conf\authz更新文件:

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

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

[groups]
projadmins = zzzz

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

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

这样,SVN 管理员不必单独管理所有 SVN 存储库的任何和所有用户

于 2008-09-17T13:49:16.913 回答
27

一个让我大吃一惊的问题:

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

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

您不需要在目录中包含尾部斜杠,否则您将看到 403 用于 OPTIONS 请求。

于 2009-11-25T00:43:10.080 回答
8

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

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

于 2008-09-17T10:12:45.907 回答
5

尽管我建议 Apache 方法更好,但 SVN Serve 工作正常且非常简单。

假设您的存储库名为“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
    

这将强制用户登录以读取或写入此存储库。

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

于 2008-09-17T09:31:25.023 回答
3

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

于 2008-09-17T09:17:01.530 回答
0

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

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

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

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

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

VisualSVN 服务器管理器中的存储库权限 在此处输入图像描述

PowerShell 中的存储库权限 在此处输入图像描述

非管理员用户可以通过 RepoCfg 工具管理权限 在此处输入图像描述

于 2020-04-29T21:21:41.523 回答