如何处理申请中的授权?

时间:2011-02-09 15:51:03

标签: c# asp.net security authorization

我已完成ASP.NET 3.5 Web应用程序的身份验证部分。我想了解更多有关常见授权模式的信息。

我可以提出目前的授权结构:

我有一个带有“模块”和“操作”表的数据库。 模块代表应用程序中的系统,操作代表一个人能够在系统中执行的操作。

客户,订单,结算将被定义为模块。 “操作”与模块相关:Customer.Add,Customer.Delete将是客户操作。

每个用户都有一个角色,可以访问某些操作,具体取决于他们的角色。

请注意,页面菜单是根据用户的访问权限生成的,用户将看不到他们无权访问的模块和操作。


我的问题首先在于如何在此处实施授权方案,可能使用现有的模式或技术。

我应该如何以及何时保护模块,并检查用户的授权以对所述模块执行操作?

我还没有实现这个,但这是我想到的一种方式:

  1. 用户点击操作:模块:客户|操作:添加
  2. 在点击事件中,我查看用户的角色,我验证用户是否可以执行操作,然后我触发操作或相应地指导用户。

  3. 请原谅这个问题的模糊性。我不知道在这里要问什么。

    我希望了解人们如何处理授权,以及人们如何允许/禁止访问业务方法。我不确定声明性安全性是我需要的,或者我上面提供的简单示例是要走的路。

    这里有很多选择,可能性似乎无穷无尽。如果我有任何模型或模式可以处理应用程序内部的授权,请告诉我。

3 个答案:

答案 0 :(得分:1)

如果你想这样,那么从小处开始。

首先实现具有重载的public bool User.HasRightsFor(Module m, Action a)行的功能。它甚至可以是静态的,因为您可以从系统中获取当前用户。

然后,您可以简单地询问用户是否有权使用当前操作/模块/其他操作并采取相应措施。

它与您目前的想法非常相似,除了我不会查看角色然后决定但直接返回结果。您可以稍后解决内部问题,系统将更容易修改。

您可以轻松地将此类系统与(例如)ASP.NET Role-Based Authorization集成。

答案 1 :(得分:0)

你看过Microsoft-s AzMan-Authorization Manager了吗?

它包含一个API来编程以询问操作 和gui(azman.msc),您可以在其中定义角色和映射权限并将它们存储在xml文件中。

因此,您可以定义AzMan-Operation“CustomerAdd。

,而不是定义模块+操作(”客户“加”添加“)。

答案 2 :(得分:0)

我知道我的答案是后来者,但我想指出的是,在您拥有动态访问控制需求的情况下,例如您所描述的多个属性/参数的情况,您需要考虑属性 - 基于访问控制(ABAC)和实现ABAC的可扩展访问控制标记语言(XACML)。

您可以在以下参考站点上阅读更多内容:

使用XACML,您可以定义以下策略:

  • 客户可以支付他们拥有的账单
  • 客户可以查看分配给他们的账单以及分配给他们负责人员的账单(例如儿童)
  • 客户代表可以管理代表分配到
  • 的区域内的账单
  • ...