簡體   English   中英

ASP.Net MVC模型綁定程序-忽略屬性

[英]ASP.Net MVC Model Binder - Ignore Properties

我有一個使用實體框架6的ASP.Net MVC5網站。

我正在使用基於ASP.Net Identity角色的安全性,該安全性在頁面內執行精細的安全檢查,以確定某些輸入字段對於用戶是否應可見。

@if (User.IsInRole(MyProj.Security.Roles.ViewSocial)) {
   @Html.TextBoxFor(m=> m.SSN)
}

如果用戶沒有權限,則不會創建輸入字段,因此模型綁定器將清空此屬性的值。

在不顯示要編輯的屬性時,如何處理這些屬性?

@Html.HiddenFor()將無法工作,因為我無法在客戶端HTML中包含可以在源代碼中看到值的標記。

在這種情況下是否需要自定義模型活頁夾?

是的,您應該做些什么,因為即使HTML輸入也可以通過現代瀏覽器中的開發人員工具注入,並且將被發布到控制器,您會認為他是被授權的,但實際上他未被授權。

是的,您絕對需要防止惡意用戶這樣做。 有兩個選擇。

  1. 您可以通過檢查用戶是否被授權來執行驗證用戶的正確邏輯。

  2. 正如您在代碼中建議的那樣,為此應用自定義模型聯編程序,並且只有在他被授權的情況下才設置該屬性。

     public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { if (bindingContext.ModelType == typeof(HomePageModels)) { HttpRequestBase request = controllerContext.HttpContext.Request; string title = request.Form.Get("Title"); string day = request.Form.Get("Day"); string month = request.Form.Get("Month"); string year = request.Form.Get("Year"); if(User.IsInRole("Admin")) { string SSN = request.Form.Get("SSN"); } return new HomePageModels { Title = title, Date = day + "/" + month + "/" + year, SSN = SSN }; //// real time HomePageModels instance should be loaded from database here to avoid saving null if person is not authorized to do so } else { return base.BindModel(controllerContext, bindingContext); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM