2015-10-14 35 views
0

我一直在努力爲我們公司開發內部員工門戶。有部門,工作等級,工作區域,角色(用戶,編輯者,管理員,超級管理員等)和特殊組(高級管理人員等)進行用戶分組。像Facebook Sharings(靈活ACL)的高級定位數據庫設計

用戶必須有一個(只有一個)部門。 用戶必須有一個(只有一個)工作成績。 用戶必須在至少一個區域工作。 用戶必須有一個(只有一個)角色。 用戶可能有一個或多個特殊組。

工作成績和角色是分層的(一個等級或角色可能是另一個的繼承),但其他的不是。

用戶將只看到允許的菜單並訪問允許的路線。

用戶還將選擇在發佈新內容時哪些用戶可以查看它。 例如: 組合1 :(IT或財務部門)和(工作級別是9,10,11之一)和(面積是1,5,8之一)和(獨家特別小組是1.5, 8)除了用戶ID = 1 組合2 :(人力資源部門)和(工作級別爲11)和user_id = 3,4,5

組合可以像組合1和組合2那樣相關爲AND/OR

所以,會有很多內容,每個內容都會有不同的組權限。我嘗試創建數據庫模式,但很難獲取用戶登錄時看到的所有內容。序列化的數據對於在db中保存組合集是很好的,但對於序列化的數據來說看起來是不可能的。在這個問題上使用MongoDB有沒有好處?我怎樣才能在表中保存組/用戶權限的組合?

我研究了大量的ACL和RBAC示例,但找不到最佳解決方案。請幫忙。

順便說一句,我使用Laravel框架。

謝謝。

+0

的可能的複製[複合右傾系統:ACL,RBAC多什麼(http://stackoverflow.com/questions/13580702/complex-righty-system-acl-rbac-還有更多) –

回答

1

您需要查看基於屬性的訪問控制(ABAC - Wikipedia)和可擴展訪問控制標記語言(XACML)。 NIST,美國國家科學院&技術在這裏給出了一個很好的介紹ABAC

XACML將爲您提供表達使用您屬性的細粒度訪問控制策略的能力。在你的問題,你有:

  • 用戶屬性
    • 部門
    • 職位專用
    • 工作區
    • 作用
  • 對象(資源)的屬性
    • 內容類型
    • 內容位置
    • 內容分類

有了XACML可以編寫規則,如:

與等級== 1,用戶可以做動作==編輯內容類型==後 if content.department == user.department。

您可以擁有儘可能多的規則,包括衝突規則或環境規則(拒絕早上9點之前的訪問)。

查看Eclipse的ALFA插件來編寫自己的策略(Wikipedia | Download)。

HTH, 大衛

+0

非常感謝。不幸的是,沒有任何PHP和MySQL實施ABAC。所以,我無法想象如何創建數據庫模式和寫查詢。 :/ –

+0

看看PHP Slim和MySQL FGAC –