2015-09-01 109 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; 
     }