2012-08-28 65 views
2

如何控制對ASP.Net MVC 3視圖上表單字段的訪問?

用戶 「jtirado」 被分配角色 「HR-助理」,可以訪問路線 「mymvcapp/employeee /編輯/ 1452」 編輯僱員(ID:1452)的數據。

作爲「人力資源助理」,該用戶可以更改員工電話號碼和電子郵件,可以查看員工工資,但不能編輯金額。

電話號碼,電子郵件,工資是dabatase字段,由視圖上的「asp.net-mvc-control」或「HTML-control」表示/呈現。所以我想根據用戶的角色來限制對這些控件的訪問。

以前的經驗

我以前做過一個經典的3層ASP.Net 3.5 Web窗體應用程序,使用母版,一個BasePage類和RoleBasedAccessControl數據庫模型。

MasterPage根據其指定的角色構建用戶有權訪問的選項菜單。

BasePage類檢查用戶是否有權訪問所需的頁面,如果是,檢查用戶可以編輯哪些控件(例如:DdlClientType,TxtLastName,ChkIsActive)。

這樣,我不必使用if-then語句來檢查權限,並且可以根據需要創建任意數量的角色,爲他們提供任何權限,而無需更改任何C#代碼。

我打算爲這個新的MVC應用程序使用相同的RoleBasedAccessControl數據庫模型。

問題

所以我dubts是關於如何使用ASP.Net MVC 3實現母版和BasePage類或是否有實現這一目標的另一種方式,如果我應該做的另一種方式。

在我看來,ViewMasterPage是與Web-Forms-MasterPages相當的MVC。我也聽說過剃刀布局頁面。

無論如何,我想我應該在控制器中處理所有這些。

我將使用:

  1. ASP.NET MVC 3.0
  2. 剃刀

我檢查這些帖子:

asp.net mvc user permissions and views

Best Practices for controlling access to form fields

Best practices for control permissions?

ASP.NET MVC Master Pages

Implement secure ASP.NET MVC applications

但他們並不完全適合我的情況。

+0

您正在使用哪種引擎?剃刀有佈局頁面而不是母版頁,這可能會影響答案。 –

+0

@MikeMcCaughan我將使用Razor視圖引擎。增加了「剃鬚刀」標籤 – Nathan

回答

1

Razor引擎的一個問題是頁面上沒有「Controls」集合,就像在WebForms中一樣。因此,您將無法遍歷頁面中的所有控件並對它們執行某些操作。

也就是說,您仍然可以使用「基本視圖」的想法,通過子類System.Web.Mvc.WebViewPage和/或System.Web.Mvc.WebViewPage<TModel>概述in a previous question。同樣,從控制器繼承也將有助於基礎控制器。

我不確定我在這裏有具體的答案,但我做的一件事是在我的模型屬性上添加自定義屬性,指出哪些角色可以訪問它們。然後我重載像@Html.TextBoxFor()這樣的內置方法,傳入當前用戶的角色。在重載中,我根據屬性中的屬性檢查角色參數。

在你的情況下,屬性可能不起作用,而是你會從數據庫讀取授權;相同的想法,只是一個不同的實現。

希望能讓你朝着正確的方向前進。

+0

但是查看頁面有FindControl(String)方法。這允許按名稱搜索控件。該名稱將從數據庫加載。所以,在將HTML呈現到視圖之前,我可以將TextBox中的一個字段更改爲Label? – Nathan

+0

從我的理解來看,'System.Web.Mvc.ViewPage '是來自ASPX渲染引擎,而不是Razor引擎,它是'System.Web.Mvc。** Web ** ViewPage'的來源。但是我必須承認,我從來沒有試圖攔截渲染或者換掉這種控制,所以YMMV。另一種選擇是創建一個像@ @ Html.ControlFor()這樣的函數,它可以運行'@ Html.EditorFor()'或'@ Html.DisplayFor()',具體取決於角色。 –

2

這聽起來像你可以使用自定義編輯器模板,並有你的邏輯在那裏。

在您的Viewmodel中,您可以使用屬性來確定要使用哪個模板 - 通過UIHint或設置DataType屬性併爲其定製模板。

然後,您的編輯器模板可以確定是否渲染編輯或顯示值(或完全隱藏)。不要忘記在你的活頁夾中執行相同的規則,或者你開放了讓用戶操縱他們不應該訪問的數據的可能性。

相關問題