[英]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輸入也可以通過現代瀏覽器中的開發人員工具注入,並且將被發布到控制器,您會認為他是被授權的,但實際上他未被授權。
是的,您絕對需要防止惡意用戶這樣做。 有兩個選擇。
您可以通過檢查用戶是否被授權來執行驗證用戶的正確邏輯。
正如您在代碼中建議的那樣,為此應用自定義模型聯編程序,並且只有在他被授權的情況下才設置該屬性。
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.