2015-09-01 74 views
1

我们有一个asp.net mvc web服务,它需要能够检查网络文件夹上的NTFS权限,并将只有那些文件夹和文件的列表返回到UI用户有权查看。我们不能为此使用模拟。我们将如何去完成这件事?Web服务需要检查用户的NTFS文件权限

+1

看看这个[问题](http://stackoverflow.com/questions/3021698/effective-file-permissions-tools-api-in-windows) –

+0

@YacoubMassad谢谢!我会看看。 – steveo

回答

0

在解决这个问题时,我发现这个问题很有帮助,但它并不完全符合我们的需求:
Effective file permissions tool's api in windows。感谢@YacoubMassad指引我朝这个方向发展。使用此代码,我创建了一个有效的权限服务来检查读取权限,但是我遇到了意外问题。该服务对于用户具有查看权限的文件夹可以正常工作,但对于其他用户而言,它将错误地返回true,因为它没有为他们返回掩码。结果是我的服务显示了用户未被授权查看的文件夹列表。我猜想我可以改变我的服务来解决这个问题,但它变得越来越复杂。

我去的解决方案并不是那么优雅,而是简单而有效。我写了一个方法,为每个目录调用GetDirectories()。对于GetDirectories()成功执行的每个目录,路径将被添加到返回到视图的列表中。由于我们的权限是在目录级别处理的,所以这是我所需要的。我还处理文件上的任何UnauthorizedAccessExceptions,以防万一在此级别设置权限。

 public IList<FilePathObject> PopulateAuthorizedPathList() 
     { 
      IList<FilePathObject> authorizedPathList = new List<FilePathObject>(); 
      foreach (FilePathObject pathObject in fullPathList) 
      { 
       var dir = new DirectoryInfo(pathObject.FullPath); 
       if (dir.Exists) 
       { 
        try 
        { 
         var info = dir.GetDirectories(); 
         authorizedPathList.Add(pathObject); 
        } 
        catch (UnauthorizedAccessException ex) 
        { 

        } 
       } 
      } 
      return authorizedPathList; 
     }