過濾

2012-01-17 64 views
2

我們的是特定於domain.Here產品是一些典型的安全使用情況,過濾

  1. 普通用戶可以根據權限僅編輯自己的個人資料數據或任何數據
  2. 用戶可以看到屬於他的部門只有數據,而其他用戶可以從各個部門的數據

這些需求的變化,從客戶到客戶,所以我們不能僅僅硬編碼在應用程序代碼中的過濾邏輯或維護ap的多個版本摺疊。

我們使用基於內容的過濾Hibernate的標準和想補充基於與許可相關的一些表達式的其他限制。上面提到的用例1的表達式可能看起來像這樣,'userId=user.userId'其中'user'是一個關鍵字並且表示當前經過身份驗證的用戶,'userId'是創建標準的對象的屬性。

我們想要定義一個dsl,我們可以使用它來導出標準限制以及SQL的'where'子句。

是否有任何現有的框架,使我們能夠做到這一點,而不用去dsl?基於上面提到的用例,你認爲它可以以不同的方式實現嗎?

附加信息:我們只定義帶有元信息的域對象來生成UI。我們的核心框架將保持持久性,安全性等。

回答

1

我們決定使用我們自己的dsl使用antlr

2

您是否測試過Hibernate過濾器? 它們是記錄級過濾的絕佳機制,您可以在每個實體上定義多個過濾器(例如,針對您的案例使用兩個過濾器),並根據當前用戶啓用或禁用它們。 可以提到過濾器可以接受參數(例如您當前的用戶ID)。

我們已經使用了一個大的項目,其中有一個層次的組織單元和運行良好的Hibernate 3的這一大特點。

順便說一下,如果您使用Oracle作爲數據庫,請考慮Oracle的虛擬專用數據庫功能。

+0

埃米爾,我知道Hibernate過濾器,但它不符合我們的需要。感謝您的建議。 – Adi 2012-01-23 10:19:51