2011-05-20 112 views
2

我们为apache上的多个项目和业务文件托管一个svn存储库。这是由多个程序员和一些项目文件夹也由客户访问。例如布局:svn.accessfile困难

svn/ourcompany/business 
svn/ourcompany/projects 
svn/ourcompany/projects/proj1 
svn/ourcompany/projects/proj2 
svn/ourcompany/projects/proj3 

此前我们svn.accessfile看起来如下:

[groups] 
admin = jd 
programmer = jd,pr1,pr2 

[ourcompany:/] 
@admin = rw 

[ourcompany:/business] 
@admin = rw 

[ourcompany:/projects] 
@admin = rw 
@programmer = rw 

[ourcompany:/projects/proj1] 
client1a = rw 
client1b = rw 
webclient = rw 

今天我们发现,这种设置会导致403错误webclient1对我们公司面试:/项目/ proj1

经过一些研究承包商建议添加

[groups] 
admin = jd 
programmer = jd,pr1,pr2 

[ourcompany:/] 
* = r 
@admin = rw 

[ourcompany:/business] 
* = 
@admin = rw 

[ourcompany:/projects] 
@admin = rw 
@programmer = rw 

[ourcompany:/projects/proj1] 
client1a = rw 
client1b = rw 
webclient = rw 

但现在意味着我需要要添加

*= 

到项目文件夹中的每个项目???

有人可以建议在svn.accessfile中的权限如何在文件夹层次结构中工作吗?下面

<VirtualHost ipadress:80> 

      ServerName subversion.ourcompany.com 
      ServerAdmin [email protected] 
      DocumentRoot /var/www/subversion.ourcompany.com 
      DavLockDB /var/lock/apache2/DavLock 

      <Location /svn> 
        DAV svn 
        SVNParentPath /var/svn 
        SVNListParentPath on 
        SVNAutoversioning on 
        SVNIndexXSLT "/repos-web/view/repos.xsl" 
        #ModMimeUsePathInfo on 
        AuthzSVNAccessFile /etc/apache2/svn.accessfile 
        AuthType Basic 
        AuthName "SVN" 
        AuthUserFile /etc/apache2/svn.passwd 
        Require valid-user 

        # compress as much as possible 
        SetOutputFilter DEFLATE 
        SetInputFilter DEFLATE 
        # Don't compress images 
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary 
      </Location> 

      <IfModule mpm_itk_module> 
        AssignUserId www-data www-data 
      </IfModule> 

      DeflateFilterNote Input instream 
      DeflateFilterNote Output outstream 
      DeflateFilterNote Ratio ratio 

      LogFormat '"%r" %{outstream}n/%{instream}n (%{ratio}n%%) %s' deflate 
      CustomLog /var/log/apache2/svn-deflate.log deflate 
      CustomLog /var/log/apache2/svn-access.log "%t %u %{SVN-ACTION}e" env=SVN-ACTION 
      ErrorLog /var/log/apache2/svn-error.log 


    </VirtualHost> 

Apache虚拟主机,我们想实现什么:

Web客户端来访问我们公司面试:只/项目/ proj1,并有我们公司面试没有读访问:/项目,后者可能是通过将一个* =放入公司的/子项目的每个子文件夹中来实现,但这并不可行。

+0

您能否包含您想要达到的整体信息?哪些组应具有哪些文件夹的访问权限?目前有很多信息,但我没有看到你想要达到的目标。请将其添加到问题中,我们应该能够提出一个替代访问文件。 – mliebelt 2011-09-13 22:32:00

+0

已更新的问题,谢谢你回到我身边 – jdog 2011-09-14 08:40:17

回答

1

我想先给出如下建议:

  • 尝试定义组,并在您访问文件的规则,只使用群。这使得以后改变事情变得更容易,并且理解规则是什么。
  • 使用表示组的语义的组名称。这使得它更容易理解规则。
  • 尝试给每个用户只有一个组,因此更容易理解该用户的角色(以及访问权限)是什么。

我会改变/添加一些零件,使完整的生成的文件是:

[groups] 
admin = jd 
programmer = jd,pr1,pr2 
gr_client1 = client1a,client1b,webclient1 

[ourcompany:/] 
* = 
@programmer = r 
@gr_client1 = 
@admin = rw 

[ourcompany:/projects] 
@programmer = rw 

[ourcompany:/projects/proj1] 
@gr_client1 = rw 

这表达了以下

  • 您有三类用户:管理员,程序员和个别项目的客户端(这里的例子是gr_client1)。
  • 整体访问权限说管理员可以读写所有内容。您不必在子目录中重复该规则,它会自动继承。
  • 程序员可以读取任何内容,并在所有项目中额外编写访问权限。
  • 客户端可能只能访问他们的个人目录,并可能在那里读写。

因此,您必须为每个新组添加一个额外的客户端组,然后在其中添加用户,并为其各个项目添加一个规则。

PS:在你的问题webclient1被使用,但在你给的文件中,它只是webclient。你想要哪一个?

+0

似乎很好地工作,抱歉花了这么长的时间来试试这个 – jdog 2011-11-07 09:20:59

+0

没关系,只要你回来:-) – mliebelt 2011-11-07 09:51:15