【发布时间】:2010-09-10 00:42:29
【问题描述】:
我已经使用 SVN 建立了一个存储库并上传了项目。有多个用户在从事这些项目。但是,并不是每个人都需要访问所有项目。我想为每个项目设置用户权限。
我怎样才能做到这一点?
【问题讨论】:
标签: svn authorization svn-administraton
我已经使用 SVN 建立了一个存储库并上传了项目。有多个用户在从事这些项目。但是,并不是每个人都需要访问所有项目。我想为每个项目设置用户权限。
我怎样才能做到这一点?
【问题讨论】:
标签: svn authorization svn-administraton
在您的 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 文件中找到一些简单的文档。
【讨论】:
@groupname 调用组,这在您的示例中非常完美,只是指出来。
@斯蒂芬·贝利
要完成您的回答,您还可以通过存储库中的纯文本文件将用户权限委派给项目经理。
为此,您使用包含以下内容的默认 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 文件,其中包含以下内容的串联:
authz 文件/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
您不需要在目录中包含尾部斜杠,否则您将看到 403 表示 OPTIONS 请求。
【讨论】:
您可以使用svn+ssh:,然后它基于对给定位置的存储库的访问控制。
这就是我在我的大学中托管项目组存储库的方式,我无法设置其他任何东西。只需拥有该组拥有的目录,并在其中运行 svn-admin(或其他任何内容)意味着我不需要进行任何配置。
【讨论】:
虽然我建议 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 文件中包括适当的用户。
【讨论】:
最好的方法是设置 Apache 并通过它设置访问权限。检查svn book 寻求帮助。如果你不想使用 Apache,你也可以使用 svnserve 做简单的访问控制。
【讨论】:
Apache Subversion 支持path-based authorization,它可以帮助您为存储库(文件或目录)中的路径上的用户和组帐户配置细粒度权限。基于路径的授权支持三种访问级别 - 无访问、只读和读/写。
基于路径的授权权限以特殊语法存储在每个存储库或每个服务器的授权文件中。这是一个来自 SVNBook 的示例:
[calc:/branches/calc/bug-142]
harry = rw
sally = r
当您需要具有许多路径和帐户的复杂权限结构时,您可以从 VisualSVN Server 提供的基于 GUI 的权限管理工具中受益:
【讨论】: