Autor Beitrag
mcbain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 1



BeitragVerfasst: Do 03.03.11 11:54 
Hallo,
ich lese Zugriffsrechte von Dateien aus und schreibe diese auch wieder mit Hilfe von FileSystemAccessRule, dies funktioniert auch wunderbar.
Sprich ich kann auslesen, ob die Rechte vererbt wurden oder ob ein bestimmter User Vollzugriff (=FullControl) oder nur Lesen (=Read) oder Write(=Schreiben) etc. darf.
Schreiben kann ich diese Rechte dann auch, aber "Nur für diesen Ordner". Ich würde aber gerne die Rechte für "Diesen Ordner, Unterordner und Dateien" setzen.
Leider weiß ich nicht wie ich das bewerkstelligen kann.

Ich habe mir gedacht, dass es eigentlich so irgendwie gehen müsste:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
FileSecurity fSecurity = File.GetAccessControl(@"C:\sos");
          
    fSecurity.AddAccessRule(new FileSystemAccessRule("test1234",
                    FileSystemRights.FullControl,
                    InheritanceFlags.ObjectInherit,
                    PropagationFlags.InheritOnly,
                    AccessControlType.Allow));
          
    File.SetAccessControl(@"C:\sos", fSecurity);


Aber leider bekomme ich immer eine Exception, dass ein Flag nicht gesetzt werden konnte. Außerdem bin ich mir gar nicht sicher, ob das die richtige Funktion ist.

Wäre nett, wenn mir jemand weiterhelfen könnte.
Vielen Dank
mcbain Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 60
Erhaltene Danke: 1



BeitragVerfasst: Mo 07.03.11 08:27 
Ich hab das Problem gelöst. Man muss dabei nach Datei und Ordner unterscheiden...

Will man die Sicherheits-Parameter einer Datei ändern, so muss man folgendes verwenden:

ausblenden C#-Quelltext
1:
2:
3:
4:
FileSecurity fSecurity = File.GetAccessControl(fileName);
fSecurity.RemoveAccessRule(new FileSystemAccessRule(account,
FileSystemRights.FullControl, AccessControlType.Allow));
File.SetAccessControl(fileName, fSecurity);


Für die Sicherheits-Parameter eines Ordners muss man folgenden Code einsetzen:

ausblenden C#-Quelltext
1:
2:
3:
4:
DirectoryInfo dirInfo = new DirectoryInfo(fileName);
DirectorySecurity dirSecurity = dirInfo.GetAccessControl();
dirSecurity.AddAccessRule(new FileSystemAccessRule(account, FileSystemRights.AppendData,InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow));
dirInfo.SetAccessControl(dirSecurity);