2011-04-21 64 views
4

我正在研究一個具有CRM功能的大型Java EE web應用程序,我們正在尋找一種安全方法/庫/解決方案/任何東西。基本的基於角色的安全性不起作用,因爲訪問控制必須基於角色的層次結構,但必須可選地針對每個文檔進行定製。由於將存儲保密和專有信息,因此要求安全性正常工作。如何管理大量的權限?

舉例:要使用百貨商店,貨架潛行者儲料機可以創建報告,其他儲料機可以讀取只有他們是在同一個部門。現在,他們的部門經理可以讀/寫/更新/刪除所有由存貨人撰寫的報告,並撰寫所有其他部門經理可以閱讀的報告,但不能查看區域經理可以使用的商店經理等的報告。複雜性:高層人員可以讓低層人員看到事物,或者向個人(部門向多個特定存儲員寫文檔)或其下的每個人(店鋪經理向整個商店寫備忘錄)或任何你可以想象的排列。此外,個人可以創建他們的同事看不到的報告,或者他們可以選擇授予訪問權限來存儲其他地區的存儲器等。

我們正在考慮一個ACL,每個實體只有一個權限,但擔心大量記錄會創建。即使只有一個30歲以上的部門的每個人都可以讀懂報告(在指揮系統中),那麼創建單個報告需要〜40條記錄!每個用戶每週有1個報告,每個用戶每年有2000個權限。 1,500個用戶意味着每年超過3,000,000個權限。

這似乎是一個規則引擎爲基礎的方法將是很好的,但所以我們不敢隨便說的方法,我還沒有看到任何博客或文章提的是方法。

我們也在考慮一些ACL /規則的自制混合,您可以授予一個部門ID與「經理」或「股東」等鑑別器的權限,但擔心檢查所有可能的權限你可以專門由其他用戶授予權限,你有權爲你的部門的memeber,你可以有權限的商店,或區)的成員聽起來像一個容易出錯的繁瑣的噩夢。

我們的應用程序的最佳方法是什麼?

回答

1

你可以看看使用Spring Security和ACL--有關Springs ACL實現的好處是它是用AoP實現的,它應該更易於集成。

聽起來好像您的安全需求非常複雜 - 關閉我的頭頂我不知道如何實現此操作..但是您可以通過創建ACL對象的層次結構和對象來減少所需的記錄數從父對象'繼承'權限。您授予用戶讀取權限一個報告的父 - 所以他們將繼承該部門的子報告讀訪問。或者,管理員可能具有讀取和更新部門的權限。所有這一切的關鍵是你的java對象模型的結構。

我有一個類似的情況,在一個系統中有數以千計的物品在業務單元 - 出版物 - 問題 - 文章。你可以有ACL的的hierarchys - 所以在我的系統 - 即有C/R/W權限到特定業務部門的用戶,繼承層次結構中的所有子對象的權限。

+0

春天ACL絕對是一個考慮因素。但是,我們希望分發應用程序,我們知道,我們必須在後端服務器上爲每次調用它們創建一個新的安全上下文。我們不希望在前端安全,以便我們可以重複使用其他前端(可能是iPad應用)的安全性。這看起來很醜陋,不可取,但絕對可行。 – ArtB 2011-04-21 16:20:32