以编程方式确定路径是否受限制

时间:2011-09-08 16:53:30

标签: c# asp.net authorization httpmodule

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

HttpModule是否有办法确定当前请求的路径是否受到保护?我不想对代码中的值进行硬编码。

2 个答案:

答案 0 :(得分:3)

如果您使用标准authentication/authorization,则可以使用CheckUrlAccessForPrincipal

UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);

答案 1 :(得分:1)

没有直接的方法来查看文件系统条目并获得它的有效权限。计算文件或目录上的有效权限集是......复杂的(这将是一种礼貌的方式)。

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

这些问题有一些帮助:

最简单的方法是要求你想要的权限,如果你没有它们就捕获异常并使用它来返回bool是/否值:

// 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 ;
}