2011-05-20 153 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