我正在實施內部網站點的訪問控制。如果公司幾乎沒有200多名員工和自定義權限,那麼這很容易。我知道這是瘋狂的,但我無法改變它。因此,我試圖找到一個滿足我的需求的通用實現,但找不到它,所以我自己去做。最後,我提出了一個相當通用的解決方案,讓我思考:以前必須做到這一點!是否有基於規則的訪問控制的簡單通用實現?
我稱之爲STOP(主題任務對象權限)訪問控制。我有以下關係:
.-------. .-----------. .-------.
| users |1---*| STOPRules |*---1| tasks |
`-------' '-----------' '-------'
甲STOP規則具有以下屬性
STOPRule {
Subject;
Task;
ObjectType;
Permission;
Relation;
}
對象關係可以是:所有者,創建者,反向器等,則不需要此字段,以支持通用任務。當它在那裏時,當前用戶和對象實例之間的關係由委託來計算。然後將當前關係與規則上的所需關係進行比較以允許或拒絕訪問。
如果我不夠清楚,請告訴我。
出現了兩個問題:
有這樣一個開源實現?
您是否看到我遇到此路徑後遇到的任何問題?
編輯:我繼續實際上開始實施這一模式。第一個問題是我需要主題和對象之間的關係來支持任何用例。現在,我可以存儲以下規則:
約翰(主題)可以的(許可)編輯(任務)的爲了(對象),如果他是創造者(關係)訂購。
請你們能提供一個不能用這個模型表達的REALISTIC用例嗎?
+1爲「辦公空間」類型的氣氛 - 你可能都會填寫tps報告。 – JonH
作爲您的模型設計的一部分,[基於角色的訪問控制](http://en.wikipedia.org/wiki/Role-based_access_control)是否聽起來像它適合模型明智的賬單?你的標題如此接近我想知道這是你最初的意思。 – 2012-05-08 18:28:54
@Ninefingers不,不幸的是,它不是。基於rOle的交流和基於交流的交流共享相同的縮寫,但不同,我的意思是第二個。在基於規則的交流中,訪問規則在要保護的對象(或資源)中定義(從操作系統視圖來講),使其適應Web,最近我看到的是Zend_Acl在Zend上的ACL實現框架,但它期望我加載所有的權限,因爲它是rOle而不是基於rUle的,它假定它將少許許可規則。 – svallory