【问题标题】:Forms authentication Of Asp.netAsp.net的表单认证
【发布时间】:2010-12-10 11:45:39
【问题描述】:

我正在开发 Asp.net 应用程序,我的应用程序中有 4 个角色。 1. 管理员 2. 用户 3. 经销商 4. 会员。我正在为此使用表单身份验证,这对于单个角色(用户)来说一切正常。但现在我有 4 个角色,我不知道如何管理它。我有 4 个不同用户的文件夹。 如果我使用经销商帐户登录并且如果我更改用户的 url,那么它也允许我访问用户部分。但我不想要这个。我需要在我的应用程序中用户只能访问他的访问区域。意味着如果您的经销商已登录,那么他只能访问经销商页面或同一文件夹。

请帮我找到这个解决方案。

【问题讨论】:

    标签: asp.net forms forms-authentication authorization


    【解决方案1】:

    您可以使用 web.config 来设置权限,或者您也可以更精细地装饰您想要锁定的类或方法,如下所示:

    [PrincipalPermissionAttribute(SecurityAction.Demand, Role = @"Administrators")]
    

    所有这些都是您可以设置的角色管理器的一部分。从阅读 this 文章开始,该文章解释了该怎么做。

    【讨论】:

      【解决方案2】:

      这里有两件事要看。首先,如果您在 web.config 中使用 <location> 元素,则按角色限制对每个文件夹的访问应该足够简单,例如

      <location path="Resellers">
          <system.web>
              <authorization>
                  <allow roles="Reseller"/>
                  <deny roles="*"/>
             </authorization>
          </system.web>
      </location>
      
      <location path="Users">
          <system.web>
              <authorization>
                  <allow roles="User"/>
                  <deny roles="*"/>
             </authorization>
          </system.web>
      </location>
      ...
      

      同样在您的个人页面中,您可以调用IsUserInRole 函数来检查您的用户是否具有访问该页面的正确角色。

      您可能想获得一份Beginning ASP.NET Security 的副本,它提供了有关如何执行此操作的大量信息。

      【讨论】:

      • 不会拒绝所有角色然后停止吗?
      • @Lazarus 可能...我永远记不起设置授权元素的所有细节。已经交换了它们。
      • 我相信它们是按定义顺序处理的:)
      【解决方案3】:

      您需要在 web.config 文件中为您限制访问的每个文件夹设置适当的身份验证设置,即

      <authorization>
        <deny users="?" />
        <allow roles="Administrators" />
        <deny users="*" />
      </authorization>
      

      将只允许具有“管理员”角色的经过验证的用户访问。

      【讨论】:

      • 您不需要拒绝匿名用户。您只需要 Allow 角色和 Deny All。
      • 是的,但确实缩短了验证时间,为什么要尝试对匿名用户进行角色查找。
      【解决方案4】:

      您必须在每个文件夹中放置一个 web.config 文件,以限制对相关角色的访问。例如,在 resellers 文件夹中,您有一个 web.config,其中包含:

      <authorization>
        <deny users="*"/>
        <allow roles="Resellers"/>
      </authorization>
      

      其他文件夹依此类推。

      【讨论】:

      • 不会点击拒绝所有用户并停止吗?
      【解决方案5】:

      使用如下代码:

      <location path="Users">
              <system.web>
                  <authorization>
                      <allow roles="Users"/>
                      <deny users="*"/>
                  </authorization>
              </system.web>
          </location>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-07
        相关资源
        最近更新 更多