我有一個文件夾,它有一些嚴格的限制。對於一個用戶,這個人可以看到文件是否存在,但不能複製文件,打開文件等等。他們能做的唯一的事情就是看文件是否存在。FileSystemRights:僅列表文件夾
當我看頂層,我看到列出文件夾內容進行檢查。這是他們被允許擁有的唯一權限。現在
,當使用C#拉權利,我看到幾個項目設置,不只是一個。當我更深入地看待權利時,我發現在這個較低的層次上,相應的項目被檢查。
當我得到的權利,這個文件夾,它顯示因爲讀了低級別的標誌設置該文件夾具有「讀」訪問。但是,我已經用此用戶的帳戶進行了測試。他們肯定沒有閱讀權限。
如果我重新創建一個新的文件夾,並設置爲這裏列出的權限,然後用戶可以將文件複製出來的新文件夾,他們不應該是能夠做到的。
我不理解Windows安全模式。
我如何驗證用戶具有列表訪問,但不讀訪問?我會特別查詢什麼?注意:查詢「列出文件夾/讀取數據」而不是「讀取權限」不起作用,如下所示。這兩者顯然都是由更高級別的「列出文件夾內容」選項設置的。
UPDATE:
我包括代碼剪斷我用拉的信息。也許這將有助於確定我在找什麼。
internal void GroupsFromPath(string pth, bool IncludeInherited)
{
DirectorySecurity ds;
try
{
DirectoryInfo di = new DirectoryInfo(pth);
ds = di.GetAccessControl(AccessControlSections.Access);
}
catch
{
return ret;
}
AuthorizationRuleCollection acl = ds.GetAccessRules(true,
IncludeInherited, typeof(NTAccount));
foreach (FileSystemAccessRule ace in acl)
{
bool L = CheckRights(ace, FileSystemRights.Traverse |
FileSystemRights.ListDirectory);
bool R = CheckRights(ace, FileSystemRights.Read);
bool W = CheckRights(ace, FileSystemRights.Modify);
DO_MAGIC(pth, L, R, W);
}
}
private bool CheckRights(FileSystemAccessRule ACE,
FileSystemRights fileSystemRights)
{
bool r = ((ACE.FileSystemRights & fileSystemRights) == fileSystemRights)
&& (ACE.AccessControlType == AccessControlType.Allow);
return r;
}
我不想改變價值。我正在嘗試獲取已經在ACE中的值。我不明白你的陳述如何適用於這種情況。 – Jerry
@Jerry:我已經更新了我的答案。您可以使用PropagationFlags和InheritanceFlags檢查「僅列出文件夾內容」權限。 – Hans
說實話,這對我來說沒有任何意義,但它確實會返回正確的價值。當我使用相同的模式來檢查READ和WRITE時,它會返回相應的真/假值。謝謝!! – Jerry