【问题标题】:Programmatically determine if path is restricted以编程方式确定路径是否受到限制
【发布时间】:2011-11-13 04:21:23
【问题描述】:

我正在 ASP.NET 2 中创建一个 HttpModule。模块需要根据请求的路径是公共的还是受保护的路径来执行不同的逻辑。 web.config 使用<system.web><authorization> 标签和几个<location> 标签设置授权。

HttpModule 有没有办法判断当前请求的路径是否受到保护?我不想硬编码代码中的值。

【问题讨论】:

    标签: c# asp.net authorization httpmodule


    【解决方案1】:

    如果您使用标准的authentication/authorization,那么您可以使用CheckUrlAccessForPrincipal

    UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);
    

    【讨论】:

    • 是的,我使用的是标准配置模式。谢谢!
    【解决方案2】:

    没有直接的方法可以查看文件系统条目并获得对它的有效权限。并且计算文件或目录的有效权限集......很复杂(这是一种礼貌的说法)。

    这似乎是 System.IO 类应该提供的一条相当明显的信息,但显然 CLR 团队不这么认为。我认为问题的一部分是固有的竞争条件。给定对象的权限是动态的,可以想象随时更改。它们甚至可能在您的权限检查和对象的实际访问之间发生变化,从而引发异常。

    这些问题有一些帮助:

    最简单的方法是请求您想要的权限,如果您没有权限,则捕获异常并使用它返回一个布尔值是/否:

    // you'll need access to the namespace namespace System.Security.Permissions
    public bool HasAccess( string path , FileIOPermissionAccess accessDesired )
    {
      bool isGranted ;
    
      try
      {
        FileIOPermission permission = new FileIOPermission( accessDesired , path ) ;
    
        permission.Demand() ;
    
        isGranted = true ;
    
      }
      catch
      {
        isGranted = false ;
      }
    
      return isGranted ;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-20
      • 2010-11-11
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多