C# 如何在应用程序中处理授权?
我已完成ASP.NET 3.5 web应用程序的身份验证部分。我想了解更多关于常见授权模式的信息 请允许我介绍我目前的授权结构: 我有一个带有“模块”和“操作”表的数据库。 模块表示应用程序中的系统,操作表示可以在系统中执行的操作 客户、订单、账单将被定义为一个模块。 “操作”与一个模块相关:Customer.Add、Customer.Delete将是客户操作 每个用户都有一个可以访问特定操作的角色,具体取决于他们的角色 请注意,页面菜单是根据用户的访问权限生成的,用户不会看到他们无权访问的模块和操作C# 如何在应用程序中处理授权?,c#,asp.net,security,authorization,C#,Asp.net,Security,Authorization,我已完成ASP.NET 3.5 web应用程序的身份验证部分。我想了解更多关于常见授权模式的信息 请允许我介绍我目前的授权结构: 我有一个带有“模块”和“操作”表的数据库。 模块表示应用程序中的系统,操作表示可以在系统中执行的操作 客户、订单、账单将被定义为一个模块。 “操作”与一个模块相关:Customer.Add、Customer.Delete将是客户操作 每个用户都有一个可以访问特定操作的角色,具体取决于他们的角色 请注意,页面菜单是根据用户的访问权限生成的,用户不会看到他们无权访问的模块
我的问题首先是如何在这里实现授权方案,可能使用现有的模式或技术 我应该如何以及何时保护模块,并检查用户对所述模块执行操作的授权 我还没有实现这一点,但我想到了一种方法:
请原谅这个问题的模糊性。我不知道该问什么 我希望了解人们如何处理授权,以及人们如何允许/不允许访问业务方法。我不确定声明式安全性是否是我所需要的,或者我上面提供的简单示例是否是可行的方法
在这里,我有很多选择,而且可能性似乎无穷无尽。请让我知道是否有任何模型或模式可以在应用程序内部处理授权 如果你想这样做,那就从小事做起 首先使用重载实现公共bool User.hasrights(模块m,动作a)的功能。它甚至可以是静态的,因为您可以从系统中获取当前用户 然后,您可以简单地询问用户是否有权进行当前操作/模块/任何操作,并相应地采取行动 这与您目前的想法非常相似,只是我不会查看角色,然后进行决策,而是直接返回结果。您可以稍后解决内部问题,系统将更易于修改
您可以轻松地将此类系统与(例如)ASP.NET集成。如果您希望这样,请从小处着手 首先使用重载实现公共bool User.hasrights(模块m,动作a)的功能。它甚至可以是静态的,因为您可以从系统中获取当前用户 然后,您可以简单地询问用户是否有权进行当前操作/模块/任何操作,并相应地采取行动 这与您目前的想法非常相似,只是我不会查看角色,然后进行决策,而是直接返回结果。您可以稍后解决内部问题,系统将更易于修改 您可以轻松地将此类系统与(例如)ASP.NET集成。您看过吗 它包含一个API,用于针对ask操作进行编程 还有一个gui(azman.msc),您可以在其中定义角色和映射权限,并将它们存储在xml文件中 因此,在您的方法中,您可以定义AzMan操作“CustomerAdd”,而不是定义模块+操作(“Customer”加上“Add”。您看过吗 它包含一个API,用于针对ask操作进行编程 还有一个gui(azman.msc),您可以在其中定义角色和映射权限,并将它们存储在xml文件中
因此,在您的方法中,您可以定义AzMan操作“CustomerAdd”,而不是定义模块+操作(“Customer”加上“Add”)我知道我的答案是一个迟到的人,但我想指出的是,在你拥有动态访问控制需求的场景中,比如你所描述的多个属性/参数的输入,你需要考虑基于属性的访问控制(ABAC)和可扩展访问控制标记语言(XACML)。它实现了ABAC 您可以在以下参考网站上阅读这两方面的更多信息:
- NIST在ABAC上
- 客户可以支付他们自己的账单
- 客户可以查看分配给他们的账单以及分配给他们负责人(例如儿童)的账单
- 客户代表可以在其指定的区域内管理账单
我知道我的答案是一个迟到的人,但我想指出的是,在你拥有动态访问控制需求的场景中,比如你所描述的多个属性/参数被踢进去的时候,你需要考虑基于属性的访问控制(ABAC)和可扩展访问控制标记语言(XACML)。它实现了ABAC
您可以在以下参考网站上阅读这两方面的更多信息:- NIST在ABAC上
- 客户可以支付他们自己的账单
- 客户可以查看分配给他们的账单以及分配给他们负责人(例如儿童)的账单
- 客户代表可以在其指定的区域内管理账单