如何在SVN中设置访问控制?
我已经使用SVN和上传的项目build立了一个仓库。 有多个用户在这些项目上工作。 但是,并不是每个人都在为所有项目工作,需要访问。 我想为用户设置每个项目的权限。
我如何做到这一点?
在你的svn \ repos \ YourRepo \ conf文件夹中,你会发现两个文件, authz和passwd 。 这是你需要调整的两个。
在passwd文件中,您需要添加一些用户名和密码。 我假设你已经做了这个,因为你有人使用它:
[users] User1=password1 User2=password2
然后你想用authz文件相应的分配权限:
创build你想要的概念组,并添加人员:
[groups] allaccess = user1 someaccess = user2
然后从权限和项目级别中select他们拥有的访问权限。
所以让我们给所有访问权限的人们从根节点访问:
[/] @allaccess = rw
但只给我们“一些访问”的人只能访问一些较低级别的项目:
[/someproject] @someaccess = r
您还可以在authz和passwd文件中find一些简单的文档。
@Stephen贝利
要完成答案,还可以通过存储库中的纯文本文件将用户权限委派给项目经理。
要做到这一点,你使用默认的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
文件授权SVNpipe理员修改SVN仓库中一个名为“/admin/acl_descriptions.txt”的纯文本文件,SVNpipe理员或项目经理将在其中修改和注册用户。
然后你设置一个预先提交的钩子,它将检测修订是否由该文件组成(并且只包含该文件)。
如果是的话,这个钩子脚本会validation你的纯文本文件的内容,并检查每一行是否符合SVN的正确语法。
然后一个提交后的钩子将更新\conf\authz
文件的连接 :
- 上面提供的TEMPLATE
authz
文件 - 纯文本文件
/admin/acl_descriptions.txt
第一次迭代由SVNpipe理员完成,他补充道:
[groups] projadmins = zzzz
他承诺他的修改,并更新authz
文件。
然后,项目经理“zzzz”可以添加,删除或声明任何一组用户和他想要的任何用户。 他提交文件并更新authz
文件。
这样,SVNpipe理员就无需关注所有SVN仓库的所有用户 。
抓住了我的一个陷阱:
[repos:/path/to/dir/] # this won't work
但
[repos:/path/to/dir] # this is right
您不需要在目录中包含尾部斜线,否则您将看到“选项”请求的403。
您可以使用svn + ssh :,然后它基于对给定位置的存储库的访问控制。
这是我在我的Uni上托pipe一个项目组资料库的方式,我无法设置其他任何东西。 只要拥有一个该组所拥有的目录,并在其中运行svn-admin(或其它),就意味着我不需要进行任何configuration。
虽然我会build议Apache方法更好,SVN服务工作正常,而且非常简单。
假设你的仓库被称为“my_repo”,它存储在c:\ svn_repos:
-
在“C:\ svn_repos \ my_repo \ conf”中创build一个名为“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
这将强制用户login读取或写入这个存储库。
对每个存储库执行以下步骤,仅在每个存储库的passwd
文件中包含适当的用户。
最好的方法是设置Apache并通过它设置访问权限。 检查svn书的帮助。 如果你不想使用Apache,你也可以使用svnserve做简单的访问控制。