首先建立一個版本庫後,會生成最初的目錄結構和基本的配置檔案,本文主要分析“authz”檔案的内容;我們先抛開alias和groups不談,将重點放在路徑的權限配置上。
一. 權限格式
svn權限的基本規則如下:
上面的代碼配置了兩條路徑的權限,'[]'括起來的是路徑名,權限的格式是'user=權限',權限的類别有空、r、rw,上面的*=意思是所有人沒有權限。是以上面的配置是:路徑/path上user1有讀權限,user2有讀寫權限,其他所有人沒有權限;路徑/path/paths上user1有讀寫權限。
二. 權限規則
1.在路徑上配置過權限的使用者(r/rw),無論在其父目錄上有無權限,都對該路徑有權限,例如:
如上,user1對/trunk有讀權限,user2對/trunk/app有讀寫權限,但是對/trunk沒有權限,但是user2仍然可以操作/trunk/app下的内容。之前在TortoiseSVN上檢視目錄樹的時候發現如果父目錄沒有權限的話是無法檢視有權限的子目錄的,導緻誤解為父目錄沒權限則子目錄沒權限,後來通過checkout和commit等證明使用者對該路徑是有權限的。
2.在配置檔案中,對同一條路徑多次配置,會合并所有配置内容,如果有對相同使用者的權限配置,則最後的配置生效,例如:
上面代碼對路徑/trunk配置了兩次,最終效果等同于:
3.如果某路徑的配置中包含*=r,那麼所有使用者的權限最低是r(即使有配置過使用者權限為空,如:user=),如果有配置*=rw,則所有使用者的權限為rw,例如:
效果等價于
如果配置*=r,則權限是rw的使用者不受影響
總結第1和第3,‘*=’所配置的權限會覆寫本條路徑中比它低級的權限配置(即*=r會覆寫使用者的空權限配置,*=rw會覆寫r權限和空權限的配置),比它進階的權限則不受影響。
4.如果一條路徑的配置(不考慮多次配置)内容中沒有*=(或者*=r,*=rw),則該路徑會繼承父目錄的權限,例如:
則路徑/trunk/app最終的權限等同于:
5.如果一條路徑和其父目錄對一個使用者有不同的權限配置,則通路路徑自身的配置生效。其實這點和類的繼承很像,子類會繼承父類的屬性,自己沒有定義的屬性就直接使用父類的,如果自己定義了,則會覆寫父類的屬性。
http://www.cnblogs.com/dong93/p/4257277.html