如何测试System.Web.Configuration.AuthorizationSection?

时间:2013-09-12 19:17:10

标签: asp.net web-config

在我的网络配置中,我只允许特定Active Directory组中的用户访问目录

<location path="Administration">
  <system.web>
    <authorization>
      <allow roles="MyDomain\MyApp-Administrators"/>
      <deny users="?"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>

我有链接到该目录中的页面,我想在我的网页上禁用它。

在代码中,在我的page_load中,我能够检索web.config的部分:

System.Web.Configuration.AuthorizationSection authorization = (System.Web.Configuration.AuthorizationSection)System.Web.Configuration.WebConfigurationManager.GetSection("system.web/authorization", "Administration");

我可能会将自己的逻辑推广到示例配置并确定当前用户是否仍然具有访问权限,但我冒着逻辑不匹配框架如何操作或引入其他错误的风险。是否有现有功能可以告诉我用户是否可以在运行时访问我的应用程序中的页面?

1 个答案:

答案 0 :(得分:0)

我为文件查看器树工具做了类似的事情,它在每个目录/子目录中搜索web.config,并在返回bool的函数中检查用户是否有权访问该文件夹。我认为可能对你有用的部分是:

foreach (AuthorizationRule rule in authorization.Rules)
{
    if (rule.Action == AuthorizationRuleAction.Allow)
    {
        foreach (string role in rule.Roles)
        {
            if (Roles.IsUserInRole(role)) //This would be whatever Role management you are using to check if the logged-in user is in a role.... so should be the same as how the framework does it.
            {
                return true;
            }
        }
     }
 }
 return false;

这对我很有用:

  1. 它使用角色管理功能来查看他们是否具有访问权限(我使用自定义功能而不是Roles.IsUserInRole(),因此只需使用站点通常用于控制基于角色的访问权限的任何内容)。
  2. 它使用web.config值,因此没有任何硬编码。