svn:authz配置詳解

我們對項目根目錄做了限制,該目錄只允許arm事業部的經理才能修改,其他人都只能眼巴巴的看着:

[arm:/]
@g_manager = rw
* = r

[arm:/] 表示這個目錄結構的相對根節點,或者說是 arm 項目的根目錄
這裏的 @ 表示接下來的是一個組名,不是用戶名。你當然也可以將 @g_manager=rw 這一行替換成 michael=rw ,而表達的意義完全一樣。
*表示“除了上面提到的那些人之外的其餘所有人”,也就是“除了部門經理外的其他所有人”,當然也包括總經理那個怪老頭
* = r 則表示“那些人只能讀,不能寫”
4   authz.conf 之項目子目錄
然後,我們要給總部人員開放日誌目錄的讀寫權限:

[arm:/diary/headquarters]
@g_manager = rw
@g_headquarters = rw
@g_vip = r
* =

我敢打賭,設計svn的傢伙們,大 部分都是在 unix/linux 平臺下工作,所以他們總喜歡使用 / 來標識子目錄,而完全忽視在 MS Windows 下是用 \ 來做同樣的事情。所以這兒,爲了表示 arm\diary\headquarters 這個目錄,我們必須使用 [arm:/diary/headquarters] 這樣的格式。這裏最後一行的 *= 表示,除了經理、總部人員、特別人士之外,任何人都被禁止訪問本目錄。這一行是否可以省略呢?之所以這兒需要將 @g_vip=r 一句加上,就是因爲存在上述這個解釋。如果說你沒有明確地給總經理授予讀的權力,則他會和其他人一樣,被 * 給排除在外。如果衆位看官中間,有誰玩過防火牆配置的話,可能會感覺上述的配置很熟悉。不過這裏有一點與防火牆配置不一樣,那就是各個配置行之間,沒有 先後順序 一說。也就是說,如果我將本段配置的 *= 這一行挪到最前面,完全不影響整個配置的最終效果。請注意這兒,我們並沒有給 arm\diary 目錄設置權限,就直接跳到其子目錄下進行設置了。我當然是故意這樣的,因爲我想在這兒引入“繼承”的概念。權限具備繼承性 任何子目錄,均可繼承其父目錄的所有權限,除非它自己被明確設置了其他的權限。也就是說,在 arm 目錄設置權限後, arm\diary 目錄沒有進行設置,就意味着它的權限與 arm 目錄一樣,都是隻有經理纔有權讀寫,其他人只能乾瞪眼。【 * = 是否可以省略】【用例子引入覆蓋】【單用戶權限的繼承問題】【父目錄權限集成與全面覆蓋問題】現在來看看好了,我們現在掌握了“繼承”的威力,它讓我們節省了不少敲鍵盤的時間。可是現在又有一個問題了,屬性具備覆蓋性質子目錄若設置了屬性,則完全覆蓋父目錄。

5   authz.conf 的其他注意點
父目錄的 r 權限,對子目錄 w 權限的影響
把 這個問題專門提出來,是因爲在1.3.1及其以前的版本里面,有個bug,即爲了子目錄的寫權限,項目首目錄必須具備讀權限。因此現在使用了1.3.2版 本,就方便了那些想在一個代碼庫存放多個相互獨立的項目的管理員,來分配權限了。比如說央舜公司建立一個大的代碼庫用於存放所有員工日誌,叫做 diary,而arm事業部只是其中一個部門,則可以這樣做:

[diary:/]
@g_chief_manager = rw
[diary:/arm]
@g_arm_manager = rw
@g_arm = r

這 樣,對於所有arm事業部的人員來說,就可以將 svn://192.168.0.1/diary/arm 這個URL當作根目錄來進行日常操作,而完全不管它其實只是一個子目錄,並且當有少數好奇心比較強的人想試着 checkout 一下 svn://192.168.0.1/diary 的時候,馬上就會得到一個警告“Access deni”,哇,太酷了。

默認權限
如果說我對某個目錄不設置任何權限,會怎樣?馬上動手做個試驗,將:

[diary:/]
@g_chief_manager = rw

改成:

[diary:/]
# @g_chief_manager = rw

這樣就相當於什麼都沒有設置。在我的 svn 1.3.2 版本上,此時是禁止任何訪問。也就是說,如果你想要讓某人訪問某目錄,你一定要顯式指明這一點。這個策略,看起來與防火牆的策略是一致的。

只讀權限帶來的一個小副作用
若設置了:

[arm:/diary]
* = r

則svnserve認爲,任何人,都不允許改動diary目錄,包括刪除和改名,和新增。

也就是說,如果你在項目初期創建目錄時候,一不小心寫錯目錄名稱,比如因拼寫錯誤寫成 dairy,以後除非你改動 authz.conf 裏面的這行設置,否則無法利用 svn mv 命令將錯誤的目錄更正。

改進
1   對中文目錄的支持
上 午上班的時候,Morson 來到 Michael 的桌子前面,說道:“你是否可以將我們的北京辦、上海辦目錄,改成用中文的,看着那些拼音我覺得很難受?” Michael 心想,還好這兩天剛瞭解了一些與 unicode 編碼相關的知識,於是微笑地回答:“當然可以,你明天下午就可以看到中文目錄名稱了。”

使用 svn mv 指令,將原來的一些目錄改名並 commit 入代碼庫,改名後的目錄結構如下:

arm
    ├─工作日誌
    │  ├─總部人員
    │  ├─北京辦
    │  └─上海辦
    ├─公司公共文件參考目錄
    └─臨時文件存放處
   
修改代碼庫的 authz.conf 文件,將相應目錄逐一改名

使用 UltraEdit 將 authz.conf 文件轉換成不帶 BOM 的 UTF-8 格式

將 配置文件轉換成 UTF-8 格式之後,Subversion 就能夠正確識別中文字符了。但是這裏需要注意一點,即必須保證 UTF-8 文件不包含 BOM 。BOM 是 Byte Order Mark 的縮寫,指 UNICODE 文件頭部用於指明高低字節排列順序的幾個字符,通常是 FFFE ,而將之用 UTF-8 編碼之後,就是 EFBBBF 。由於 UTF-8 文件本身不存在字節序問題,所以對 UTF-16 等編碼方式有重大意義的 BOM,對於 UTF-8 來說,只有一個作用——表明這個文件是 UTF-8 格式。由於 BOM 會給文本處理帶來很多難題,所以現在很多軟件都要求使用不帶 BOM 的 UTF-8 文件,特別是一些處理文本的軟件,如 PHP、 UNIX 腳本文件等,svn 也是如此。

目前常用的一些文本編輯工 具中,MS Windows 自帶的“記事本”裏面,“另存爲”菜單保存出來的 UTF-8 格式文件,會自動帶上 BOM 。新版本 UltraEdit 提供了選項,允許用戶選擇是否需要 BOM,而老版本的不會添加 BOM。請各位查看一下自己常用的編輯器的說明文件,看看它是否支持這個功能。

利用 UltraEdit ,我們可以將 BOM 去掉。方法是,首先利用“UTF-8 TO ASCII”菜單將文件轉換成本地編碼,通常是GB2312碼,然後再使用“ASCII TO UTF-8(UNICODE Editing)”來轉換到 UTF-8 即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章