我已完成ASP.NET 3.5 Web应用程序的身份验证部分。我想了解更多有关常见授权模式的信息。
我可以提出目前的授权结构:
我有一个带有“模块”和“操作”表的数据库。 模块代表应用程序中的系统,操作代表一个人能够在系统中执行的操作。
客户,订单,结算将被定义为模块。 “操作”与模块相关:Customer.Add,Customer.Delete将是客户操作。
每个用户都有一个角色,可以访问某些操作,具体取决于他们的角色。
请注意,页面菜单是根据用户的访问权限生成的,用户将看不到他们无权访问的模块和操作。
我的问题首先在于如何在此处实施授权方案,可能使用现有的模式或技术。
我应该如何以及何时保护模块,并检查用户的授权以对所述模块执行操作?
我还没有实现这个,但这是我想到的一种方式:
请原谅这个问题的模糊性。我不知道在这里要问什么。
我希望了解人们如何处理授权,以及人们如何允许/禁止访问业务方法。我不确定声明性安全性是我需要的,或者我上面提供的简单示例是要走的路。
这里有很多选择,可能性似乎无穷无尽。如果我有任何模型或模式可以处理应用程序内部的授权,请告诉我。
答案 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,您可以定义以下策略: