繁体   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