0

在我的网络配置中,我只允许特定 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");

我可能会滚动我自己的逻辑来示例配置并确定当前用户是否仍然可以访问,但我冒着我的逻辑与框架的执行方式不匹配或引入其他错误的风险。是否有现有功能可以用来告诉我用户是否可以在运行时访问我的应用程序中的页面?

4

1 回答 1

0

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

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 值,因此没有任何内容是硬编码的。
于 2013-09-12T19:46:42.843 回答