允许基于用户角色对UI字段进行不同级别访问的最佳方法是什么?

在某些屏幕上,我们可能希望将一个角色的字段设为只读,将另一个角色的字段隐藏起来,并由另一个角色进行编辑。许多类似问题的答案建议每个角色具有不同的ViewModel(和视图?),其中仅包含您希望该角色中的用户编辑的属性,但是涉及很多重复-我们将有3或4个相似的虚拟机,它们之间只有几个属性/绑定属性不同。然后,我们必须处理这些不同视图模型到Controller中模型的映射。

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

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

我们如何用MVC来实现呢?

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

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

只需添加一下,我们就可以在运行时进行更可配置的操作,无论是哪个角色具有哪些权限,都可以为页面上的任何字段添加安全性,而不必在View的每个字段周围添加任何代码。

最佳答案

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

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

关于c# - MVC现场级安全性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32074014/

10-12 01:41