C# 如何在应用程序中处理授权?

C# 如何在应用程序中处理授权?,c#,asp.net,security,authorization,C#,Asp.net,Security,Authorization,我已完成ASP.NET 3.5 web应用程序的身份验证部分。我想了解更多关于常见授权模式的信息 请允许我介绍我目前的授权结构: 我有一个带有“模块”和“操作”表的数据库。 模块表示应用程序中的系统,操作表示可以在系统中执行的操作 客户、订单、账单将被定义为一个模块。 “操作”与一个模块相关:Customer.Add、Customer.Delete将是客户操作 每个用户都有一个可以访问特定操作的角色,具体取决于他们的角色 请注意,页面菜单是根据用户的访问权限生成的,用户不会看到他们无权访问的模块

我已完成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”) 您可以在以下参考网站上阅读这两方面的更多信息:

    • NIST在ABAC上
    使用XACML,您可以定义策略,例如:

    • 客户可以支付他们自己的账单
    • 客户可以查看分配给他们的账单以及分配给他们负责人(例如儿童)的账单
    • 客户代表可以在其指定的区域内管理账单

    我知道我的答案是一个迟到的人,但我想指出的是,在你拥有动态访问控制需求的场景中,比如你所描述的多个属性/参数被踢进去的时候,你需要考虑基于属性的访问控制(ABAC)和可扩展访问控制标记语言(XACML)。它实现了ABAC

    您可以在以下参考网站上阅读这两方面的更多信息:

    • NIST在ABAC上
    使用XACML,您可以定义策略,例如:

    • 客户可以支付他们自己的账单
    • 客户可以查看分配给他们的账单以及分配给他们负责人(例如儿童)的账单
    • 客户代表可以在其指定的区域内管理账单

    我认为一个很好的起点可能是标准asp.net系统-会员资格提供商、角色提供商等。他们有一个相当通用的标准模式,这将是一个很好的起点。我认为一个好的起点可能是使用标准的asp.net系统—membershipprovider、rolesprovider等。它们有一个相当通用的标准sche