2013-01-01 104 views
5

我有興趣爲用戶訪問軟件系統內的資源執行高級訪問控制。我在醫療IT方面工作,年輕的我經常低估role-based access control in healthcare的複雜性。但是這個問題應該適用於任何具有複雜ACL需求的人。高級訪問控制庫

相當一段時間php gacl一直是我去到庫處理醫療IT系統裏面非常複雜的ACL控制問題的目的。但我現在通常更多地使用javascript,特別是節點。我已經搜索npm的圖書館以一般化的方式進行訪問控制。

我想支持定義操作,而不僅僅是用戶和資源(3層而不是2層),我希望擁有用戶,操作和資源組,並且暗示我希望擁有ACL繼承權。從the Star Wars themed manual該庫

經典的例子是一樣的規則:

  • 船員們的所有成員(訪問,配置和使用)訪問 槍,發動機,座艙和休息,期待chewie。
  • 所有機器人都(訪問和使用)進入駕駛艙,但只有R2D2有 的發動機配置的訪問。
  • 韓有所有類型的資源訪問所有類型的 資源。這裏

的基本概念,包括概念,你可以應用到用戶的任一組(即船員,乘客或機器人)或個人規則(漢和Chewie),你可以有不同類型的訪問(戰鬥站=駕駛艙+槍支)對不同資源(發動機和駕駛艙)進行訪問(訪問,配置,使用)或訪問組(訪問,配置+修理+使用)。

這允許配置非常複雜的訪問控制規則,並且具有相對簡單的基於組的管理。

到目前爲止,我在php-gacl之外沒有見過這樣的東西。我看了一下精彩的基於javascript的ACL項目,並且他們都宣傳簡單易用而不是全面。這也是其他典型的PHP ACL庫的真實(即Zend ACL

是否有人正在爲節點的「高級訪問控制列表」的項目?有沒有更好的方法可以找到我應該尋找的地方? (這可以說是過於複雜),以及一個規則上的CRUD API(可以很容易地轉換爲我認爲的REST接口)的API,和一個提供ACL檢查功能的非常小的文件。

技術上,只有最後一種需要被完全移植到節點,爲了使這種軟件模型的工作?

在更深層次上,我想了解哪些方法已成功用於處理此問題。這個問題通常如何解決?對於那些通過節點/ javascript甚至特定的數據庫方法(關係vs非關係)有效討論這個問題的人來說,獎勵點。我知道有很多理論基礎來做這個對錯(即對RBAC和ACL有很多意見)。我想要的是理論上堅實的東西,或者說從圖書館的角度來看,它仍然「剛剛起作用」。我專注於Javascript,但很好理解其他語言如何解決這個問題。

+0

這是關於堆棧溢出的主題。 – 2013-01-01 04:46:37

回答

3

如果你可以避免使用任何類型的ACL,你通常會更好。他們管理起來很複雜。你會好起來的造型三級安全檢查:

  1. URL/IP地址/或其他的accessPoint安全檢查
  2. 方法在資源檢查。無論你想修改或操縱你的實體,都要對其進行權限檢查。 I.E.業務規則類型的訪問。
  3. 實體資源檢查。如果用戶/ API/OAuth令牌可以訪問全部實體

這可以使用RBAC完成。您的組織/網站的角色均分配有一組訪問/修改/操作權限。用戶被分配了一個或多個角色,但是三個級別的檢查將檢查權限,而不是角色。

我會把Spring Security和RBAC看作是谷歌搜索和模型。下面是我發現有用的幾個環節:

http://www.xaprb.com/blog/2006/08/16/how-to-build-role-based-access-control-in-sql/

http://www.xaprb.com/blog/2006/08/18/role-based-access-control-in-sql-part-2/

(因爲Spring Security的所有「原始」的例子,瘋狂命名的檢查,你會被告知要讀條,提供使用替代名稱和用途爲Spring權限「hasRole()」檢查。下面的文章討論這個在RBAC的設計)

http://springinpractice.com/2010/10/27/quick-tip-spring-security-role-based-authorization-and-permissions/

(在春季安全靈活的用途,包括RBAC好介紹)

http://www.infoq.com/presentations/Spring-Security-3

(以下給出了RBAC的問題和解決方案的一個很好的說明,而且是專爲PHP)

http://www.tonymarston.net/php-mysql/role-based-access-control.html

一個PHP框架用RBAC實現:

http://trac.symfony-project.org/wiki/UserRbac

最後,Spring Security的類圖。您會注意到它允許將安全信息放入PARALLEL表中,以保護受保護的實體。這是通過設計,以便Spring Security可以稍後添加,或取出或輕鬆替換。但它也意味着更多的表格。

http://code.google.com/p/uclm-esi-alarcos/source/browse/trunk/documentation/memoria-pfc/Figuras/Cap5/spring-security-class-diagram.png?r=295