【问题标题】:Using ASP.NET roles to represent different access levels使用 ASP.NET 角色来表示不同的访问级别
【发布时间】:2011-01-23 13:16:52
【问题描述】:

我需要设计一个系统来控制对某些信息的访问。用户的要求是使用访问级别,例如

1 级 - 支持
2 级 - 经理
3 级 - 高级经理
4级 - 部门负责人
等等。

如果某条信息被标记为级别 1,那么所有角色都应该能够查看该信息。如果标记为 3 级,则只有高级经理和部门主管可以查看,但经理和支持角色无法查看。

问题

  • 当我为一条信息分配访问级别时,我是否必须为其分配多个角色才能实现此功能?
  • 有更好的方法吗?

【问题讨论】:

    标签: asp.net security authorization roles access-control


    【解决方案1】:

    你需要实现表单认证,并在web.config中添加你的角色/级别,哪个角色可以获取哪个页面。

    <location path="yourPage.aspx">
        <system.web>
                <authorization>
                    <deny users="?"/>
                    <allow roles="Manager"/>
                    <deny users="Department Head"/>
                </authorization>
        </system.web>
    

    有关详细信息,请检查这些 URL http://msdn.microsoft.com/en-us/library/aa480476.aspx http://devhood.com/tutorials/tutorial_details.aspx?tutorial_id=85

    如果您想针对特定角色隐藏页面上的某些特定信息,您可以这样做...

    if (System.Web.HttpContext.Current.User.IsInRole("Support"))
            {
                pnl.Visible = false;//try to put your user specific details in panel to hide/show
            }
    

    【讨论】:

      【解决方案2】:

      将您的角色映射到全局枚举,以便枚举的顺序代表访问的优先级,例如:

      public enum SecurityGroup
      {
          Support, Manager, SeniorManager, DepartmentHead
      }
      

      显然,这些角色应该与您的 Provider 角色相匹配。然后,您将使用 Enum.Parse 从 GetRolesForUser 转换值,如下所示:

      var currentUserSecurityGroup = (SecurityGroup)Enum.Parse(typeof(SecurityGroup), Roles.GetRolesForUser(username));
      

      现在,您可以检查您的组的相对位置:

      if ( currentUserSecurityGroup <= SecurityGroup.SeniorManager )
         // do stuff
      

      【讨论】:

        猜你喜欢
        • 2014-12-04
        • 2016-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多