有没有什么可以帮助处理ASP.NET MVC3的“字段级”授权?

时间:2012-04-18 23:49:52

标签: asp.net-mvc

我知道您可以使用Authorize属性来控制对Controller或ActionMethod的访问......但是更精细的控制呢?例如,基于用户的角色允许/禁止特定字段似乎很常见。也许在员工档案中,员工可以编辑他的个人资料信息,但只有主管可以更改他的职位......

最理想的是,我希望能够正常开发视图,模型和控制器,并在网站上有一个配置页面,站点管理员可以使用该配置页面以任何粒度配置授权。换句话说,程序员不应该担心它(除了编写/集成系统特定部分的人。)

我可以设想DisplayFor和EditorFor检查属性以将字段呈现为ReadOnly,Hidden等...并且可能在运行时从某种授权提供程序添加属性。

问题是:是否有框架或其他内容可以做到这一点?

2 个答案:

答案 0 :(得分:1)

编写一个自定义的ModelMetaDataProvider,它允许您在将每个模型及其属性传递给视图之前更改它们的元数据。如果元数据值为ShowForEdit = false或ShowForDisplay = false,则内置帮助器不会呈现字段。

您可以利用规则引擎或其他一些ACL来操纵每个模型和属性上的元数据,以获得开箱即用的大部分行为,而无需触及内置帮助程序。在需要更多控制的边缘情况下,您可以编写自己的帮助程序并在metadata.AdditionalValues字典中传递更复杂的数据。

答案 1 :(得分:0)

您可以使用HtmlHelper在字段级别实现安全性。在下面的示例中,它们仅使用了文本框实现,但可以轻松扩展所有类型的控件:

http://bartreyserhove.blogspot.ca/2008/12/field-level-security-using-aspnet-mvc.html