ASP.Net MVC实体框架应用程序中的数据级别授权过滤器

时间:2012-10-28 04:59:49

标签: asp.net-mvc entity-framework asp.net-mvc-4 authorize

我在ASP.Net MVC 4应用程序中寻找数据级授权过滤器 我们正在使用实体框架进行数据访问。

应用程序需要显示所有数据,但应根据用户角色限制对表中某些字段的访问。

例如:TASK表 { int Id, 字符串TaskName, DateTime StartDate, DateTime EndDate }

此整个数据将显示给所有用户,用户也可以选择编辑字段。但是应该限制编辑选项,如下所示 角色管理员可以编辑所有字段
角色管理器可以编辑TaskName但不能编辑StartDate和EndDate
角色用户无法编辑任何字段

所有这些编辑都将调用TaskController中的Edit操作。

如何在我的应用程序中实现该功能。

4 个答案:

答案 0 :(得分:1)

您可以尝试使用Postsharp。 PostSharp允许您设计自定义属性,以便在编译时注入样板代码。应该可以将它用于诸如示例之类的场景。我已将它用于异常处理,日志记录,缓存和&安全。它可以应用于任何层或框架。

请参阅以下示例中的“保护字段和属性”:

http://www.sharpcrafters.com/solutions/authorization

希望它有所帮助。

答案 1 :(得分:1)

这不是EF,另一个ORM,但可能有助于了解如何完成 - 完整源代码为here

解释了自动化子系统here

它可以满足您的需求 - 行级,列级粒度,基于角色的授权。

答案 2 :(得分:0)

听起来你所追求的是一个真正的商业'智能的对象,包含属性级别的授权,而不仅仅是方法级别的授权。我建议使用CSLA.NET并使用智能对象创建业务对象模型。这为您提供了该功能以及其他功能。

答案 3 :(得分:0)

  

此整个数据将显示给所有用户,用户也可以选择编辑字段。但是应该限制编辑选项

而不是任务控制器中的单个编辑操作

  1. 为允许编辑的每个唯一字段集创建特定操作

    • Edit(TaskName, StartDate, EndDate) for Admin
    • Edit(TaskName)经理
    • 用户
    • 没有Edit操作,因为不允许更改任何字段
  2. 使用authorization per action