phpGACL中文手冊(七)
解決衝突
如果我們把Chewie加入到工程師組中會出現什麼情況呢? 預設:全部拒絕
千年隼號乘客
├─船員 [允許:全部]
│├─Han
│├─Chewie [拒絕:發動機室]
│└─Lando
├─乘客 [允許:休息室 ]
│├─絕地戰士 [允許:駕駛室]
││├─Obi-wan
││└─Luke [允許:武器室]
│├─R2D2 [允許:發動機室]
│└─C3PO
└─工程師 [允許:發動機室,武器室]
├─Han
├─R2D2
├─Hontook
└─Chewie
這就使Chewie到發動機室的許可權產生了歧義,因為從根沿樹遍曆到Chewie出現兩條路徑。如果飛船的電腦沿其中一條路徑(船員路徑),將得到"拒絕進入發動機室"的結論。而沿另一條路徑(工程師路徑)則會得到"允許進入發動機室"的結論,那麼他到底有沒權進入發動機室呢?
當你添加或編輯分屬多組的ARO對象使之對某個ACO對象的許可權發生歧義時,phpGACL系統將警告你。但它會最近優先以便解決衝突。
如果我們現在問phpGACL"Chewie有權進入發動機室嗎?"那麼返回的結果是最近ACL被修改的內容(這是phpGACL的策略)。在上面這個例子中,返回的結果是"允許",因為被工程師組指定的"允許:發動機室,武器室"許可權的時間要比被船員組指定的"拒絕:發動機室"許可權時間要近。
當有歧義的許可權設定在ACL列表中存在時,該ACL列表被稱為不一致。不一致的ACL列表是非常危險的,如果你允許你的ACL列表保持在這種狀況下的話,你可能會在不經意之下把許可權賦給不恰當的人。當phpGACL警告你ACL列表不一致時,最好還是去解決衝突以儘可能恢複其一致性。
為解決上例的衝突,我們可以作以下任何一步:
- 刪除在船員組中Chewie的"拒絕:發動機室"指令
- 添加在工程師組中Chewie的"拒絕:發動機室"指令
- 在工程師組中刪除Chewie,因為Han無論如何不認為他作工程師是一件值得考慮的事
Han選了第三種方案,將Chewie從工程師組中刪除