none
How to modify FilesSystemRights of an existing AccessRule RRS feed

  • Frage

  • I found tons of examples of adding and removing accessrules but no for modifiying a existing one.
    my Code so far:
    // ReadData
    if (!(((int)FileSystemRights.ReadData & (int)ace.FileSystemRights) == (int)FileSystemRights.ReadData))
    {
     ace.FileSystemRights = ace.FileSystemRights & FileSystemRights.ReadData;
    }
    

    I Know that this is wrong: Einer Eigenschaft oder einem Indexer "System.Security.AccessControl.FileSystemAccessRule.FileSystemRights" kann nichts zugewiesen werden -- sie sind schreibgeschützt. But how shall I do that?

    Ich möchte eine bestehende FileAccessRule bearbeiten, wenn sie nicht den Erfordernissen entspricht.

    Freitag, 27. Mai 2011 13:13

Antworten

  • Hallo Markus,

    das ist aus gutem Grund nicht so möglich.
    Denn die Zugriffslisten werden intern nach ihren Rechten uam. sortiert um eine eineindeutige
    Abbildung zu erreichen,so haben u. a. Verweigerungen Vorrang vor Berechtigungen.

    Würde man das Ändern auf direktem Wege erlauben, würde diese Ordnung u. U.
    durcheinander geraten und die Zugriffsliste nicht mehr richtig funktionieren.

    Was auch hinter der Aussage zur FileSecurity Klasse steckt:
    Die FileSecurity-Klasse blendet viele Details von DACLs und SACLs aus.
    Es sind keine Überlegungen zur ACE-Reihenfolge oder zu NULL-DACLS erforderlich.

    Um ein Recht zu modifizieren, rufe die Zugriffsliste ab, und ersetze  die nicht gewünschten Rechte
    durch ein Neues, in dem Du das alte enfernst und ein Neues anfügst, wie es auch das Beispiel zur
    FileSecurity-Klasse zeigt.

    Gruß Elmar

    Freitag, 27. Mai 2011 15:21
    Beantworter
  • Ich habe aber eine andere Lösung gefunden indem ich mit:
    DirectorySecurity.ModifyAccessRule(AccessControlModification.Set,AccessRule,out Result);
    Die falsche Regel durch die richtige ersetze
    Freitag, 27. Mai 2011 17:53

Alle Antworten

  • Hallo Markus,

    das ist aus gutem Grund nicht so möglich.
    Denn die Zugriffslisten werden intern nach ihren Rechten uam. sortiert um eine eineindeutige
    Abbildung zu erreichen,so haben u. a. Verweigerungen Vorrang vor Berechtigungen.

    Würde man das Ändern auf direktem Wege erlauben, würde diese Ordnung u. U.
    durcheinander geraten und die Zugriffsliste nicht mehr richtig funktionieren.

    Was auch hinter der Aussage zur FileSecurity Klasse steckt:
    Die FileSecurity-Klasse blendet viele Details von DACLs und SACLs aus.
    Es sind keine Überlegungen zur ACE-Reihenfolge oder zu NULL-DACLS erforderlich.

    Um ein Recht zu modifizieren, rufe die Zugriffsliste ab, und ersetze  die nicht gewünschten Rechte
    durch ein Neues, in dem Du das alte enfernst und ein Neues anfügst, wie es auch das Beispiel zur
    FileSecurity-Klasse zeigt.

    Gruß Elmar

    Freitag, 27. Mai 2011 15:21
    Beantworter
  • Ich habe aber eine andere Lösung gefunden indem ich mit:
    DirectorySecurity.ModifyAccessRule(AccessControlModification.Set,AccessRule,out Result);
    Die falsche Regel durch die richtige ersetze
    Freitag, 27. Mai 2011 17:53