2008-09-22 128 views

回答

11

布蘭登薩維奇介紹了他的PHP包「ApplicationACL」可能會或可能不會完成基於角色的訪問演示。 PHPGACL也可能工作,但我無法確定地告訴你。我可以告訴你的是,Zend Framework的Zend_ACL組件將執行基於角色的設置(不過,你必須繼承子類以便一次檢查多個角色)。承認這樣做的痛苦是你必須從整體下載(或SVN簽出)中取出Zend_ACL,我不相信它有任何外部依賴關係。

Zend_ACL的好處在於它的存儲不可知。您可以重新構建它,也可以將其設計爲序列化(我使用兩者的組合,爲緩存序列化並從數據庫重建)。

+1

羅伯特:這個答案是太舊,最好不要跟進,即使鏈接仍然工作 – dcousineau 2015-10-01 17:11:34

1

phpgacl http://phpgacl.sourceforge.net/是一個通用的基於ACL訪問控制框架

雖然我不知道任何CI具體實施做的,我知道,你只需要在主類文件進行phpgacl工作。所以我相信與CI的整合不會有任何問題。 (我的工作passingly與CI)

0

發現了Khaos ACL這是一個CI圖書館......我還檢查了phpgacl以及如何使用它的CI ... Have'nt檢查Zend的ACL呢。但也許它可以「移植」到CI

29

也許我誤解的問題,而不是基於角色的訪問控制(RBAC)以整點避免訪問控制列表(ACL)?

RBAC不同的訪問控制列表(ACL)(...),它賦予權限具體操作與意義的組織,而不是低級別的數據對象。例如,可以使用訪問控制列表來授予或拒絕對特定系統文件的寫入訪問權限,但是不會說可以更改哪種文件。在基於RBAC的系統中,操作可能是在金融應用程序中創建「信用賬戶」交易(...)。執行特定操作的權限分配是有意義的,因爲這些操作是精細的,並且它們本身在應用程序中有意義。 (引用:Wikipedia

我不知道在Zend_Acl裏或提及其他實現細節,但如果是基於ACL,我不建議將其用於基於角色的授權。

+0

jframework RBAC那麼它的建議嗎? – AbiusX 2013-02-15 19:03:59

+0

我也有相同的意見,這個問題接受了錯誤的答案.. ACL和RBAC差別很大,一個ACL解決方案被接受的RBAC問題.. – 2014-08-13 11:37:02

+0

Pedantry:「我不會建議使用他們的基於角色身份驗證「。訪問控制!=認證是的,更重要的是ACL!= RBAC^_^ – 2015-04-09 19:10:57

0

試用CodeIgniter的DX_Auth插件。我正在研究DX_Auth所具有的類似功能(而非超集)。我的CI插件集包括菜單顯示(可以通過CSS控制),調用控制器之前的基於角色的訪問控制和其他功能。我希望很快發佈它。當我這樣做時會提供項目URL

0

RBAC!= ACL - Roland對此問題唯一正確的答案。

順便說一下,它是實現任何類型的權限系統的框架的重要組成部分 - 至少在使用框架沒有意義,如果它沒有給你一個良好的引導RBAC系統 - 它可能會更好然後使用帶有任何ORM層的簡單模板系統。

這是一個PHP世界常見的反模式,像Ruby或Django這樣的框架只是作爲這些現代框架提供的一個子集「克隆」 - 作爲一個典型的綜合徵,看到缺乏良好的ACL或RBAC集成這些框架 - 本質上是一個笑話。 目前只有Yii PHP框架帶有體面的RBAC實現。

0

http://www.jframework.info(Deadlink中)

jFramework具有標準NIST級別2 RBAC與被認爲是最快的可用的增強(包括基準),它可以在一個單一的SQLite數據庫文件中操作並且徹底的測試,像手套一樣工作。

對jFramework DBAL有依賴性,但是可以用代碼中的DBAL簡單地替換DBAL SQL查詢,當然你也可以以SOP方式使用jFramework。

2

我創建了一個名爲PHP-Bouncer的開源項目,這可能會對您感興趣。它還相當年輕,但運行良好,易於配置。我最終開發了它,因爲現有的解決方案都不符合我的需求。我希望這有幫助!

0

我知道的線索是冷的,但一個新的項目已彈出:

PHP-RBAC是基於訪問控制的PHP分層NIST 2級標準的作用,是非常成熟的。這也是一個OWASP項目。

我希望你在http://phprbac.net

1

享受以下是PHP我發現了兩個RBAC庫:

我實際使用中PolyAuth的第一個:https://github.com/Polycademy/PolyAuth/

這是一個包含NIST級別1 RBAC的全功能auth庫。是的,RBAC與ACL不同。我也使用Codeigniter,你所要做的就是使用PDO驅動程序並傳入連接ID。請參見本教程如何做到這一點:http://codebyjeff.com/blog/2013/03/codeigniter-with-pdo

相關問題