2011-09-08 71 views
1

我在ASP.NET 2中创建HttpModule。模块需要根据请求的路径是公有还是受保护来执行不同的逻辑。 web.config使用<system.web><authorization>标签和几个<location>标签设置授权。以编程方式确定路径是否受限制

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

回答

3

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

UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb); 
+0

是的,我正在使用sta ndard配置模式。谢谢! – Jeff

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 ; 
} 
相关问题