asp.net如何在我的代码中引用web.config中硬编码的授权用户

时间:2012-08-16 15:28:28

标签: c# asp.net web-config authorization

我正在内联网上构建一个网站,其中一个目录只能由硬编码的授权用户访问。它们在web.config中定义。它看起来与此相似。

<location path="admin">
    <system.web>
        <authorization>
            <allow users="user1"/>
            <allow users="user2"/>
            <allow users="user3"/>
            <allow users="user4"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location> 

我想要的是创建一个指向该目录的链接,该链接仅对这些用户显示... 目前,为了构建链接,我正在重新检查Windows用户名并再次对其进行硬编码...

<% 
    if (HttpContext.Current.User.Identity.Name == "user1" ||         
        HttpContext.Current.User.Identity.Name == "user2" ||
        HttpContext.Current.User.Identity.Name == "user3" ||
        HttpContext.Current.User.Identity.Name == "user4")
    {
        Response.Write("<a href='admin/Default.aspx'>Admin Site</a>");
    }   
%>

但我想要做的是从webiconfig文件中引用我的列表并说出类似

的内容
if (HttpContext.Current.User.Identity.Name == // a user from the web.config list

这可能吗?如果有,你可以帮助我......谢谢

1 个答案:

答案 0 :(得分:3)

您可以从web.config获取授权规则,如下所示:

            AuthorizationSection configSection =
      (AuthorizationSection)ConfigurationManager.GetSection("system.web/authorization");

        var users = new List<string>();

        var rules = configSection.Rules;

        foreach (AuthorizationRule rule in rules)
        {
            if (rule.Action == AuthorizationRuleAction.Allow)
            {
                foreach (string user in rule.Users)
                {
                    if (!users.Contains(user)) users.Add(user);
                }
            }
        }

但你也必须注意规则的优先顺序。