2
我寫的代碼段檢查有以下權限設置文件夾:如何檢查只有列出訪問權限的文件夾?
注意,用戶沒有讀&執行,閱讀等,所有這些都爲「列出文件夾內容「。這就是我們需要的方式。
但是,當我在這些文件夾中掃描此特定用戶時,找不到這種情況。它總是顯示它們具有讀取權限(即讀取文件夾內的文件的能力),即使它們顯然沒有。
我在做什麼錯?下面我已經提出了關於上圖中人員的調試設置的評論。
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」總是在我的測試假的,但這個問題也是如此,無論我走哪條路繼承標誌。
我檢查過用戶。他們沒有比我們想要的更多的訪問權限。這只是我的搜索程序,他們這樣做。我實際上坐在他們的物理鍵盤上,試圖讀取文件,複製文件等。用戶的權利是正確的。是的,我知道權利標誌被使用並重新使用,因此存在交叉污染。但在這種情況下,我正在做非常基本的Windows安全設置。 – Jerry