SVN權限解析規則詳解


  轉載請注明出處:博客園——dong93,地址 http://www.cnblogs.com/dong93/p/4257277.html

  最近在做一個操作SVN的Web系統,涉及到了很多東西,包括apache執行命令、配置文件解析等;編碼過程中發現svn的權限解析過程和我所了解到的不大相同,在網上查了一些資料,但好像都是怎么配置svn,沒有詳細講解權限的生效過程,而我開發系統需要考慮到各種情況,所以我自己通過一部分資料和動手實驗總結了下面的svn權限解析規則。如果這些內容不是很全面或者有錯誤,可以提出來,我也會在后面修改補充。

  首先創建一個版本庫后,會生成最初的目錄結構和基本的配置文件,本文主要分析“authz”文件的內容;我們先拋開alias和groups不談,將重點放在路徑的權限配置上。

  一. 權限格式

  svn權限的基本規則如下:

[/path]
user1=r
user2=rw
*=
[/path/path2]
user1=rw

  上面的代碼配置了兩條路徑的權限,'[]'括起來的是路徑名,權限的格式是'user=權限',權限的類別有空、r、rw,上面的*=意思是所有人沒有權限。所以上面的配置是:路徑/path上user1有讀權限,user2有讀寫權限,其他所有人沒有權限;路徑/path/paths上user1有讀寫權限。

  二. 權限規則

  1.在路徑上配置過權限的用戶(r/rw),無論在其父目錄上有無權限,都對該路徑有權限,例如:

[/trunk]
user1=r
*=
[/trunk/app]
user2=rw
*=

  如上,user1對/trunk有讀權限,user2對/trunk/app有讀寫權限,但是對/trunk沒有權限,但是user2仍然可以操作/trunk/app下的內容。之前在TortoiseSVN上查看目錄樹的時候發現如果父目錄沒有權限的話是無法查看有權限的子目錄的,導致誤解為父目錄沒權限則子目錄沒權限,后來通過checkout和commit等證實用戶對該路徑是有權限的。

  注:如果父目錄沒有配置任何權限,在TortoiseSVN目錄樹中是可以看到有權限的子目錄的,但是看不到父目錄的其他子目錄。

  2.在配置文件中,對同一條路徑多次配置,會合並所有配置內容,如果有對相同用戶的權限配置,則最后的配置生效,例如:

[/trunk]
user1=rw
user2=rw
*=
[/trunk]
user1=r

  上面代碼對路徑/trunk配置了兩次,最終效果等同於:

[/trunk]
user1=r
user2=rw
*=

  3.如果某路徑的配置中包含*=r,那么所有用戶的權限最低是r(即使有配置過用戶權限為空,如:user=),如果有配置*=rw,則所有用戶的權限為rw,例如:

[/trunk]
user1=
user2=r
user3=rw
*=r

效果等價於

[/trunk]
user1=r
user2=r
user3=rw
*=r

效果等價於

[/trunk]
user3=rw
*=r

  如果配置*=r,則權限是rw的用戶不受影響

  總結第1和第3,‘*=’所配置的權限會覆蓋本條路徑中比它低級的權限配置(即*=r會覆蓋用戶的空權限配置,*=rw會覆蓋r權限和空權限的配置),比它高級的權限則不受影響。

  4.如果一條路徑的配置(不考慮多次配置)內容中沒有*=(或者*=r,*=rw),則該路徑會繼承父目錄的權限,例如:

[/trunk]
user1=r
*=
[/trunk/app]
user2=rw

  則路徑/trunk/app最終的權限等同於:

[/trunk/app]
user1=r
user2=rw
*=

  5.如果一條路徑和其父目錄對一個用戶有不同的權限配置,則訪問路徑自身的配置生效。其實這點和類的繼承很像,子類會繼承父類的屬性,自己沒有定義的屬性就直接使用父類的,如果自己定義了,則會覆蓋父類的屬性。

  三.查詢權限的過程

  未完待續。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM