2010-11-11 49 views
4

我有一個PHP應用程序,它具有基於單個頁面的導航ID的訪問控制機制。例如,用戶可以訪問第1,4,5頁。導航標識符不是靜態的,新的頁面(因此新的導航標識符)可能由管理員用戶生成。我有一些面向服務的架構。所以我有通過JSON從客戶端調用的服務,但也從服務器端直接通過PHP類(控制器)調用服務。我的問題是,我需要一個訪問控制機制的服務。我想將它與服務本身分開。PHP:訪問控制機制的體系結構

服務正在返回業務對象。所有這些BO都與一個具有導航ID的對象有一些「連接」。例如服務返回圖像:Image.page - > Page.navID或服務返回維度(n-n):維度 - > DimImageConnector - > Image.page - > Page.navID。

我無法想象一個乾淨的解決方案來檢查訪問權限。要在業務對象中搜索導航標識,doesen似乎不是一個非常好的簡單解決方案。

這對我的訪問控制體系結構有一些輸入是很好的。

謝謝!

順便說一句:我正在使用一個註釋框架,所以有一種可能性是通過service方法指定一些訪問信息。

+0

不能用ACL的種類來解決嗎? – 2010-11-11 13:02:38

+0

資源應該可能定義哪些用戶組有權訪問它或其子部分。其中包括一個適當的ACL設置。 – markus 2010-11-11 13:44:46

+0

也許我需要更詳細。例如。我有一個叫做新聞的模塊。因此,可能有多個頁面(使用navigation-id)使用此模塊。一個用戶擁有一個頁面的權限,另一個用戶擁有另一個頁面的權限。但是我只有一項服務,我們稱之爲NewsEntryLoader。所以兩個頁面都會調用該服務。 ... – Ben 2010-11-11 14:37:57

回答

0

如果nav-id更改並且權限基於nav-id,則每當更改時都必須重新映射所有nav-id。

可能最簡單的方法是將用戶與頁面(不是nav-id)相匹配的表。您可以修改您擁有的或創建一個新表格。然後有另一個表格將頁面映射到他們當前的導航ID。要檢查用戶是否有權訪問,請加入這兩個表。

然後,只要nav-id更改,您只需更新映射表。

我會推薦調查nav-id不會改變的方法。或者,添加一個用於nav-id的靜態ID。這樣你就可以引用靜態ID並讓nav-id隨意改變。

1

我的想法實現起來有點複雜,但我認爲它解決了這個問題。它對您的請求有一個問題,並且這不是與服務本身分離的。

想象一下這個想法。如果當前用戶可以調用該服務,則您有一個帶有方法IsCallable的基類服務類。

從您繼承的服務類,NonAuthenticatedService和AuthenticatedService。完成之後,您只需創建一個服務工廠即可檢索服務並調用它們。

在這裏,我留下了一個圖形的想法,我的tough。。對不起,圖片只是Power Point,因爲我不是CASE Tools的粉絲。 :)

Sample Hierarchy

希望我能幫助!