以编程方式确定路径是否受限
本文关键字:是否 路径 编程 方式确 | 更新日期: 2023-09-27 18:07:55
我正在ASP中创建一个HttpModule。净2。模块需要根据请求的路径是公共的还是受保护的执行不同的逻辑。网络。config使用<system.web><authorization>
标签和多个<location>
标签设置授权。
是否有一种方法可以让HttpModule弄清楚当前请求的路径是否受到保护?我不想硬编码代码中的值
如果你使用的是标准的authentication/authorization
,那么你可以使用CheckUrlAccessForPrincipal
UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, user, verb);
没有直接的方法来查看文件系统条目并获得对它的有效权限。计算文件或目录上的有效权限集是……复杂的(这将是一种礼貌的说法)。
似乎这将是一个相当明显的信息,系统。IO类应该提供的功能,但显然CLR团队不这么认为。我认为部分问题在于固有的竞争条件。给定对象上的权限是动态的,可以随时更改。它们甚至可能在您的权限检查和对象的实际访问之间发生变化,从而引发异常。
这些问题有一些帮助:
- windows中有效的文件权限工具's api
- 你怎么能很容易地检查访问是否被拒绝了一个文件在。net ?
最简单的方法是要求你想要的权限,如果你没有,捕获异常,并使用它返回一个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 ;
}