MVC - 根据用户的权限禁用大约一半的字段
本文关键字:字段 一半 权限 用户 MVC | 更新日期: 2023-09-27 18:32:31
我有一个视图,上面有大约 50 个字段。 如果用户不是管理员,我需要能够将其中大约一半设置为禁用。 正确的方法是什么? 我想有比简单地做以下 25 次更好的方法吗?
@if (User.IsInRole("Admin") == false)
{
@Html.TextBoxFor(m => m.AssociateName, new {disabled = "true"})
}
执行此操作的正确方法是创建两个视图,管理员和非管理员,然后在确定角色后呈现适当的视图。
好吧,你可以把它简化成这样:
@{
bool isAdmin = User.IsInRole("Admin");
}
@Html.TextBoxFor(m => m.AssociateName, isAdmin ? new { disabled = "disabled" } : new {})
或者,您可以创建一个编辑器模板来为您执行此操作:
@model string
@Html.TextBoxFor(m => m User.IsInRole("Admin") ? new { disabled = "disabled" } : new {})
型:
[UIHint("_MyEditorTemplate")]
public string MyProperty { get; set; }
主视图:
@Html.EditorFor(m => m.MyProperty)
或者,您可以有条件地从控制器呈现不同的视图:
if (User.IsInRole("Admin"))
{
return View("AdminView", model);
}
else
{
return View("UserView", model);
}
我想说所有这些都是有效的方法,这取决于你需要多少其他灵活性(以及你是否需要在 GET 操作中基于此执行任何其他逻辑)。
请记住,无论哪种方式,在对发布的任何值执行操作之前,都应该在 POST 上验证这一点,否则您很容易被非管理员用户注入模型。
您应该记住几件事。
-
当输入上存在禁用的属性时,输入将变为禁用。它无论您键入
disabled="true"
还是disabled="false"
或disabled
- 在所有这些情况下,输入将是禁用。这就是答案中第一个建议的原因@Ant_P行不通。 -
禁用的输入不会提交到 MVC 中的服务器。完全。一个处理此问题的更好方法是使用属性只读
-
更改 html 并删除禁用或只读属性。在这种情况下,用户将能够更改输入的值。考虑安全性。最好完全不呈现输入。
你可以创建一个自定义的html帮助程序来接受输入是否是只读的,类似于它在TwitterBootstrapMVC中完成的方式:
@Html.Bootstrap().TextBoxFor(x => x.Property).Readonly(User.IsInRole("Admin"))