2011-12-13 107 views
2

我寫的代碼段檢查有以下權限設置文件夾:如何檢查只有列出訪問權限的文件夾?

Folder with ONLY list access

注意,用戶沒有讀&執行,閱讀等,所有這些都爲「列出文件夾內容「。這就是我們需要的方式。

但是,當我在這些文件夾中掃描此特定用戶時,找不到這種情況。它總是顯示它們具有讀取權限(即讀取文件夾內的文件的能力),即使它們顯然沒有。

我在做什麼錯?下面我已經提出了關於上圖中人員的調試設置的評論。

internal bool IsListOnlyUser(string userID, string pth, bool IncludeInherited) 
{ 
    DirectoryInfo di = new DirectoryInfo(pth); 
    DirectorySecurity ds = di.GetAccessControl(AccessControlSections.Access); 

    AuthorizationRuleCollection acl = ds.GetAccessRules(true, 
      IncludeInherited, typeof(NTAccount)); 

    foreach (FileSystemAccessRule ace in acl) 
    { 
     if (ace.IdentityReference.Value.ToString().ToLower() 
      == userID.ToLower()) 
     { 
      FileSystemRights R2 = ace.FileSystemRights; 

      // *** The rights for the user with LIST only are: 
      //FileSystemRights.ReadData (same value as ListDirectory) 
      //FileSystemRights.ReadExtendedAttributes 
      //FileSystemRights.ExecuteFile (same value as Traverse) 
      //FileSystemRights.ReadAttributes 
      //FileSystemRights.ReadPermissions 
      //FileSystemRights.Synchronize 

      bool L = CheckRights(ace, FileSystemRights.ListDirectory); 

      bool R = CheckRights(ace, FileSystemRights.Read); 
      // Yet, this resolves to TRUE! But I tested. This guy does NOT 
      // have access to the files themselves. Only to the fact that 
      // the file exists. 

      bool W = CheckRights(ace, FileSystemRights.Modify); 
      // This still resolves to FALSE 

      if (L && !R && !W) 
      { 
       return true; 
      } 
     } 
    } 

    return false; 
} 

private bool CheckRights(FileSystemAccessRule ACE, FileSystemRights fileSystemRights) 
{ 
    bool r = ((ACE.FileSystemRights & fileSystemRights) == fileSystemRights) && 
     (ACE.AccessControlType == AccessControlType.Allow); 

    return r; 
} 

UPDATE

作爲一個側面說明,「IncludeInherited」總是在我的測試假的,但這個問題也是如此,無論我走哪條路繼承標誌。

回答

0

早上好,因爲它看起來根據您的意見,你可能想看看每個FileSystemRights枚舉值here的實際意義,通過給用戶一些,他們有你在不經意間給他們讀訪問權。

+0

我檢查過用戶。他們沒有比我們想要的更多的訪問權限。這只是我的搜索程序,他們這樣做。我實際上坐在他們的物理鍵盤上,試圖讀取文件,複製文件等。用戶的權利是正確的。是的,我知道權利標誌被使用並重新使用,因此存在交叉污染。但在這種情況下,我正在做非常基本的Windows安全設置。 – Jerry

相關問題