如何在ASP.NET MVC 4 / EF应用程序中处理复杂的授权?

时间:2013-09-25 19:12:06

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

在我的应用程序中添加,更新和删除各种实体的能力通常取决于所涉及的各个用户之间定义的关系。这是一个例子:

  1. 基本用户或其主管可以创建与用户关联的任务,但只有他的主管可以锁定任务,以便基本用户不再能够添加/更新/删除它。在锁定之前,两个人都可以更新任务。
  2. 实现这些复杂和高级规则的最佳方法是什么,这些规则处理用户与实体状态(新的,现有的)之间的关系,以及其他可能与用户定义的状态相关的事情。实体?

    由于

2 个答案:

答案 0 :(得分:3)

  

实现这些复杂和高级规则的最佳方法是什么,这些规则处理用户与实体状态(新的,现有的)之间的关系,以及其他可能与用户定义的状态相关的事情。实体?

您希望使用授权标准,即XACML,可扩展访问控制标记语言。 XACML是:

  • 由OASIS开发的标准,就像SAML
  • 一样
  • 专注于细粒度访问控制的标准:考虑用户信息,资源信息,状态和上下文信息的访问控制
  • 实现基于属性的访问控制(ABAC)模型的标准:用户信息,资源数据和状态都可以视为属性
  • 使用策略和规则来构建属性并授予/拒绝访问权限的标准:XACML是基于策略的
  • 可以跨多个层应用的标准,例如跨越presntation层,数据层,MVC应用程序的业务层
  • 可应用于多种技术和语言的标准,例如C#(MVC4及更多),Java,Python ......

使用XACML,您可以轻松实现关系,例如:当且仅当交易金额<1时,员工才能批准交易。员工批准限制且交易未锁定

从哪里开始?

  • ABAC上查看NIST的页面。
  • 查看OASIS XACML的page和规范
  • 查看现有实施(开源和供应商,例如我工作的那个,Axiomatics。)

答案 1 :(得分:0)

在我工作的银行,我们有一个贷款管理系统,允许整个银行层级在其报告结构中查看贷款​​。例如,Market exec可以立即看到他/她的所有报告的贷款组合。此外,他/她能够从所有报告(直接或间接)名称的列表中进行选择,以查看该员工的投资组合。

这很复杂,但我们必须维护报告结构的人力资源数据库。一旦我们有了这个,我们构建了用户函数(也可以作为存储过程完成,但用户函数在我们的LINQ to SQL后端中运行良好),这使我们可以检查用户x是否监督用户y。

因此,在您的示例中,只要您知道谁拥有该任务,并且可以访问可用于确定任务所有者是否向当前登录用户报告的方法,您应该能够轻松启用/禁用页面上的“锁定”按钮。

支持工作在于创建报告结构DB,并使其保持最新!