使用ASP.NET角色表示不同的访问级别

时间:2010-03-04 06:31:16

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

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

Level 1 - Support
Level 2 - Manager
Level 3 - Senior Manager
Level 4 - Department Head
etc.

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

问题

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

2 个答案:

答案 0 :(得分:1)

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

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

有关详情,请查看这些网址 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
        }

答案 1 :(得分:1)

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

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

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

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

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

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