Evan's Blog

Java, software development and others.

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  28 随笔 :: 0 文章 :: 73 评论 :: 0 Trackbacks

SVN可以配置多种方式进行访问,但在公司内部搭建的svn服务器,如果仅仅在局域网里访问的话,总感觉用svn协议要比http协议来得效率高些,所以,一般总是用svnserve来启动svn的服务。一般而言,如果是从svn 1.2或1.3的版本开始使用的人,总以为svn协议只能配置到仓库的权限控制,而不能针对目录进行权限控制,即使看到其authz示例文件中有如下的内容:

[ repository:/baz/fuz ]
# @harry_and_sally 
=  rw
# * 
=  r

但谨守其自带文档Chapter 6中关于svnserve一节的教导:

Notice that svnserve only understands “blanket” access control. A user either has universal read/write access , universal read access, or no access. There is no detailed control over access to specific paths within the repository. For many projects and sites , this level of access control is more than adequate. However , if you need per-directory access control , you'll need to use either use Apache with mod_authz_svn (see the section called “Per-Directory Access Control”) or use a pre-commit hook script to control write access (see the section called “Hook Scripts”).

一般还是不会多去研究,只当作是结合Apache来进行面向目录的权限控制文件示例。

其实,心里一直对这种方式有个小疙瘩,最近又要开一个新项目的代码库,虽然实际上对代码的访问控制也没有特别的要求,但心想既然authz文件里有关于目录的设置,是不是能尝试一下,用svnserve也能进行目录权限的控制呢。于是到网上搜了一下,omg,这个功能竟然早在1.3的时候就已经实现了,对其详尽而完整的描述来自Michael的这篇Subversion之路--实现精细的目录访问权限控制 ,其中的几个要点包括:
    1. svnserve支持面向目录的访问控制了;
    2. 权限具备继承性,所以需要用"* = "的形式来禁止未授权的用户访问特定子目录;
    3. svn 1.3.2及以后的版本允许对子目录进行操作而无需父目录的读权限;
    4. 如果是中文目录的话,authz必须以utf-8的格式保存,且不能带BOM,而windows自带的记事本按utf-8保存的文件则会加上BOM,所以,如果你以utf-8格式保存好后,提交代码时,svn报"section header expected"的错时,则多半是带BOM的。当然现在很多编辑器都能很方便的转换了,如ultraedit的保存为U8-DOS,editplus保存为utf-8,以及开源的Notepad++的格式转换中的“转换为utf-8码(无BOM)”等都可以完成这个工作。

无论如何,这总算解开了我心中的一个小疑团,所以,即使软件自带的文档,往往也不是绝对的权威(叫我还能相信谁:-( ,在svn 1.4.2版本中带的文档,还是针对1.3的)。不过Subversion Book网站上提供的针对svn 1.4的nightly版本已经很明确的讲解了这一部分的内容了。

posted on 2007-04-01 14:33 Evan 阅读(3253) 评论(1)  编辑  收藏 所属分类: SE笔记

评论

# re: 关于svnserve的权限控制 2007-04-04 19:48 HD
呵呵,被呼有的感觉爽罢 :)  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: