2009-07-15 44 views
6

我正在研究一個應用程序,我們正在努力盡可能強地保持關注點分離。我們發現,安全問題的交叉擔憂造成了一些複雜性。AOP並將安全性應用到UI元素

但是,看起來這些可以使用屬性和麪向方面編程來減輕。

據我所知,只要將方面應用到域圖層代碼,但如果要將其應用於UI元素,該怎麼辦?例如,如果我不想在用戶沒有執行該功能的權限時顯示按鈕,該怎麼辦?

在我們的MVC應用程序,在這一點上,我們不得不寫(僞代碼如下):

<% if (user.CanSeeSomeData) { <%=Html.TextBox("MyTextBox") } %> 

但是我們想控制與屬性的拉AOP如果可能的顯示。

任何想法?

此外,如果有第三方,開放源代碼的工具,將是有益的,這些建議是值得歡迎的。

回答

1

我想說,一個視圖不應該包含太多的編程(或根本沒有)。在P被禁止的地方使用AOP(或者AOP)的想法看起來不太好。

讓我們用另一種方式來設計它。通常,視圖有一些控制關鍵字來完成基本工作:條件和循環。更多的智慧,我會說你在那裏混合控制器角色。

因此,你放在那裏的if (user.CanSeeSomeData),如果它實際上是一個簡單的標誌。這是觀點應該的方式。

當您構建模型視圖對象(放置視圖信息的容器)時。例如,您可以使用AOP來初始化/設置該屬性中具有良好屬性的信息。

你可以要求的屬性,而不是「如果」

[UserCanSeeData] 
<%=Html.TextBox("MyTextBox") %> 

這看起來像語法糖,而不是真正的AOP。任何試圖說UserCanSeeData應該具有不止一個if(就像數據庫訪問來檢查用戶特權一樣)的嘗試是將控制器代碼移入視圖。

+0

感謝您的迴應,graffic。所以,你是說,屬性方法是好的,但應該在Conroller/ViewModel中完成,或者你是否說if語句是實現它的方式* [「這是視圖的方式」] – jlembke 2009-07-16 15:16:39

相關問題