2010-08-17 22 views
9

Ich bin ein Duplikat FileSystemAccessRule von diesem Code unten bekommen:Doppelte GetAccessRules, Einträge FileSystemAccessRule

C:\inetpub\wwwroot\AspInfo\Account 
BUILTIN\IIS_IUSRS : Allow : ReadAndExecute, Synchronize 
BUILTIN\IIS_IUSRS : Allow : -1610612736 
NT SERVICE\TrustedInstaller : Allow : FullControl 
NT SERVICE\TrustedInstaller : Allow : 268435456 

und ich kann nicht herausfinden, was oder warum es ist.

Und die angezeigten Berechtigungen stimmen nicht überein, was ich Datei FileManager Eigenschaften sehen kann. Zum Beispiel, wie finde ich die Berechtigung "Ordnerinhalt auflisten" aus dieser oder ähnlicher Iteration. Wenn jemand ein Beispiel in der .NET-Dokumentation kennt, wäre es hilfreich.

Antwort

13

Sie erhalten separate Regeln für vererbte Regeln und Regeln, die explizit für diesen Ordner festgelegt sind. Es gibt auch einen Unterschied in Abhängigkeit von den Ausbreitungseinstellungen für jede Regel. Beispielsweise können Sie eine Gruppe von Berechtigungen festlegen, die auf Unterordner und eine andere Gruppe auf Dateien innerhalb des Ordners übertragen werden. Ihr Code erhält außerdem die Überwachungsregeln (SACL) für den Ordner, in dem Sie scheinbar nur nach den Zugriffsberechtigungen (DACL) suchen.

Try this:

protected void directoryInfo() 
{ 
    var di = new DirectoryInfo(Server.MapPath("/")); 
    foreach (DirectoryInfo dir in di.GetDirectories()) 
    { 
    Response.Write(dir.FullName + "<br/>"); 
    DirectorySecurity ds = dir.GetAccessControl(AccessControlSections.Access); 
    foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
    { 
     string userName = fsar.IdentityReference.Value; 
     string userRights = fsar.FileSystemRights.ToString(); 
     string userAccessType = fsar.AccessControlType.ToString(); 
     string ruleSource = fsar.IsInherited ? "Inherited" : "Explicit"; 
     string rulePropagation = fsar.PropagationFlags.ToString(); 
     string ruleInheritance = fsar.InheritanceFlags.ToString(); 
     Response.Write(userName + " : " + userAccessType + " : " + userRights + " : " + ruleSource + " : " + rulePropagation + " : " + ruleInheritance + "<br/>"); 
    } 
    } 
} 

Die ReadAndExecute Erlaubnis Sie sehen, enthält die "Ordnerinhalt auflisten" permission. Sie können nach einzelnen Berechtigungen suchen, indem Sie das entsprechende Flag in der FileSystemRights-Enumeration verwenden. Zum Beispiel:

if (fsar.FileSystemRights && FileSystemRights.ListDirectory) 
    Console.WriteLine("Has List Directory permission"); 
+0

Die 'if'-Auswertung mit' FileSystemRights' ist nicht erlaubt. – Thomas

+0

Sollte einfach 'if (FileSystemRights.ListDirectory) {...}' überprüfen. https://msdn.microsoft.com/en-us/library/system.security.accesscontrol.filesystemrights(v=vs.110).aspx Sie sollten nicht sehen müssen, ob Sie 'FileSystemRights' in einem bestimmten Verzeichnis haben - if Sie sind in der Schleife, Sie haben Verzeichnisse. Wenn Sie Verzeichnisse haben, haben Sie 'FileSystemAccessRule'-Eigenschaften. Wenn Sie sich in der Schleife der 'FileSystemAccessRule'-Eigenschaften befinden, haben Sie garantiert' FileSystemRights'-Eigenschaften. – vapcguy

+0

@vapcguy Wie schließt das FileSystemAuditRule-Elemente aus? – Chalky