MVC现场级安全

时间:2015-08-18 13:37:06

标签: c# asp.net-mvc security asp.net-mvc-5

根据用户角色允许不同级别访问UI字段的最佳方法是什么?

在某些屏幕上,我们可能希望某个字段只读一个字段,另一个字段隐藏,另一个角色可编辑。类似问题的许多答案都表明每个角色都有不同的ViewModel(和视图?),只包含您希望该角色中的用户编辑的属性,但这涉及大量重复 - 我们有3或4个非常类似的虚拟机,它们之间只有少数属性/绑定属性不同。然后我们必须处理这些不同视图模型到Controller中模型的映射。

这也意味着如果用户想要更改我们需要更改代码的角色的权限。

与此相反,在我们的一个Web表单项目中,我们具有完整的字段级安全性,所有规则都存储在数据库中并在运行时应用,因此更改角色对控件的权限不需要任何代码更改。

我们如何使用MVC实现这一点?

如果MVC无法实现仅配置字段级安全性,那么为不同角色实现字段级安全性的最佳方法是什么?我们真的需要每个ViewModel和View的n份副本吗?

编辑添加我们发现this存储了数据库中角色的权限,但应用程序权限仍然在代码中定义。这会调用View中的控制器方法: if (ViewContext.Controller.HasPermission("ViewRestrictedHRData"))),但到目前为止看起来是我见过的最佳解决方案

只是添加我们在运行时更可配置的东西,无论是哪些角色都具有哪些权限,并为页面上的任何字段添加安全性,而无需在视图中的每个字段周围添加任何代码。

1 个答案:

答案 0 :(得分:1)

您可以使用razor语法检查用户是否处于特定角色。

@if(User.IsInRole("Administrator")) {
    Html.TextBoxFor(...);
}