ASP.NET实体框架脚手架编辑 - 特定用户的只读字段

时间:2014-11-10 14:01:16

标签: asp.net asp.net-mvc entity-framework razor

我目前有一个bog标准的脚手架ASP.NET应用程序,它对SQL后端的数据进行了视图/编辑。

以下是代码示例:

<div class="form-group">
    @Html.LabelFor(model => model.UPSCheck, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EnumDropDownListFor(model => model.UPSCheck, htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.UPSCheck, "", new { @class = "text-danger" })
    </div>
</div>

<div class="form-group">
    @Html.LabelFor(model => model.NASCheck, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EnumDropDownListFor(model => model.NASCheck, htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.NASCheck, "", new { @class = "text-danger" })
    </div>
</div>

该页面也使用Windows身份验证,用户名可通过

获得
@User.Identity.Name

我想要做的是锁定编辑页面的某些部分,以便只允许某些用户更改某些字段。我无法找到符合要求的简单方法,因此我可以与专家联系!

非常感谢任何帮助或指示。

2 个答案:

答案 0 :(得分:0)

你可以做这样的事情

<div class="form-group">
    @Html.LabelFor(model => model.UPSCheck, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EnumDropDownListFor(model => model.UPSCheck, htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.UPSCheck, "", new { @class = "text-danger" })
    </div>
</div>
@if(User.Identity.Name=="Domain\UserName")
{
<div class="form-group">
    @Html.LabelFor(model => model.NASCheck, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EnumDropDownListFor(model => model.NASCheck, htmlAttributes: new { @class = "form-control" })
        @Html.ValidationMessageFor(model => model.NASCheck, "", new { @class = "text-danger" })
    </div>
</div>
}
else
{
   //you display the read only par
   //in addition add
   @Html.HiddenFor(model=>model.NASCheck)
}

希望这会对你有所帮助

答案 1 :(得分:0)

asp.net中的默认身份验证模型为RBAC - Role Based Authentication Control。这意味着您可以检查用户角色以允许/禁止某些操作。用户是IPrincipal接口的实现,这意味着您可以使用bool IsInRole(string roleName)方法检查视图中的访问权限。

以下是IPrincipal

的更多信息

http://msdn.microsoft.com/en-us/library/system.security.principal.iprincipal(v=vs.110).aspx

示例(仅当用户为admin时才显示编辑器字段):

@if(User.IsInRole("admin")){
   @Html.TextBoxFor(model => model.yourPropertyName)      
}else{
   @Html.HiddenFor(model => model.yourPropertyName)
}

其他方式(如果用户不是管理员,则会显示已禁用的字段):

@if(User.IsInRole("admin")){
   @Html.TextBoxFor(model => model.yourPropertyName)
}else{
   // That will make field disabled
   @Html.TextBoxFor(model => model.yourPropertyName, new {disabled= "disabled" })
}