Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Berechtigung für AD Gruppe zu "This Folder Only" verteilen
Tehral
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

Berechtigung für AD Gruppe zu "This Folder Only" verteilen

beantworten | zitieren | melden

Ich habe ein paar Probleme mit Ordnerberechtigungen.

Ich möchte eine AD-Gruppe zu einem Ordner mit Änderungszugriff hinzufügen, aber dann einschränken.

Das Problem ist, dass ich nicht herausfinden konnte, wie ich eine Berechtigung auf "nur diesen Ordner" anwenden kann.

Das Ziel ist es, die folgenden Einschränkungen für einen Hauptordner festzulegen:
deny delete subfolders
deny delete
deny change permissions
deny take ownership


Ich habe ein Bild aus Windows angehängt wie es dort aussieht.

Weiss jemand wie das geht?

Vielen Dank und beste GRüsse
Attachments
private Nachricht | Beiträge des Benutzers
Spook
myCSharp.de - Member



Dabei seit:
Beiträge: 237
Herkunft: Esslingen a.N.

beantworten | zitieren | melden

Hallo Tehral,

mit folgendem Code kannst du die Berechtigungen eines Ordners abrufen:


var info = new DirectoryInfo(path);
var accessControl = info.GetAccessControl();
var rules = accessControl.GetAccessRules(true, false, typeof(SecurityIdentifier));

foreach (FileSystemAccessRule rule in rules)
{
    NTAccount account = (NTAccount)rule.IdentityReference.Translate(typeof(NTAccount));
    ...
}

Du kannst über die DirectorySecurity.AddAccessRule(FileSystemAccessRule) Methode deine gewünschte Regel hinzufügen.
Dass diese nur für den Ordner alleine gilt müsstest du glaube ich PropagationFlags.NoPropagateInherit verwenden (nicht getestet).
Du könntest diese Methode als Grundlage für dein Vorhaben anpassen:


public static void SetDirectoryAccess(
    string path, string account, FileSystemRights access, AccessControlType controlType,
    InheritanceFlags inheritanceFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
    PropagationFlags propagationFlags = PropagationFlags.None)
{
    DirectoryInfo info = new DirectoryInfo(path);
    DirectorySecurity security = info.GetAccessControl();
    security.AddAccessRule(new FileSystemAccessRule(account, access, inheritanceFlags, propagationFlags, controlType));
    info.SetAccessControl(security);
}

Grüße
spooky
private Nachricht | Beiträge des Benutzers
Tehral
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

beantworten | zitieren | melden

Vielen Dank für die Antwort Spook,

ich konnte das nun mit folgenden Code machen:

//set params for all access sets
AccessControlType DenyAccess = AccessControlType.Deny;
AccessControlType AllowAccess = AccessControlType.Allow;
InheritanceFlags inheritFlag = InheritanceFlags.None;
InheritanceFlags inheritFlag2 = InheritanceFlags.ContainerInherit;
InheritanceFlags inheritFlag3 = InheritanceFlags.ObjectInherit;
PropagationFlags propagationFlags = PropagationFlags.None;
FileSystemRights access = FileSystemRights.ChangePermissions;
FileSystemRights access2 = FileSystemRights.Delete;
FileSystemRights access3 = FileSystemRights.TakeOwnership;
FileSystemRights access4 = FileSystemRights.DeleteSubdirectoriesAndFiles;
FileSystemRights ReadAccess = FileSystemRights.ReadAndExecute;
FileSystemRights ModifyAccess = FileSystemRights.Modify;

DirectoryInfo info = new DirectoryInfo(strPath);
DirectorySecurity security = info.GetAccessControl();

//set read right for group
NTAccount GroupRead = new NTAccount(StrDomain, strGroupRead);
security.AddAccessRule(new FileSystemAccessRule(GroupRead, ReadAccess, inheritFlag2, propagationFlags, AllowAccess));
security.AddAccessRule(new FileSystemAccessRule(GroupRead, ReadAccess, inheritFlag3, propagationFlags, AllowAccess));

//set Modify right for group
NTAccount GroupModify = new NTAccount(StrDomain, strGoupModify);
security.AddAccessRule(new FileSystemAccessRule(GroupModify, ModifyAccess, inheritFlag2, propagationFlags, AllowAccess));
security.AddAccessRule(new FileSystemAccessRule(GroupModify, ModifyAccess, inheritFlag3, propagationFlags, AllowAccess));

//set special right group
security.AddAccessRule(new FileSystemAccessRule(groupModify, access, inheritFlag, propagationFlags, DenyAccess)); //ChangePermission
security.AddAccessRule(new FileSystemAccessRule(groupModify, access2, inheritFlag, propagationFlags, DenyAccess)); //Delete
security.AddAccessRule(new FileSystemAccessRule(groupModify, access3, inheritFlag, propagationFlags, DenyAccess)); //Ownership
security.AddAccessRule(new FileSystemAccessRule(groupModify, access4, inheritFlag, propagationFlags, DenyAccess)); //Delete subfiles and folders

//add rights to folder
info.SetAccessControl(security);


Am Ende habe ich nun einen Ordner mit einer Readgruppe, und einer Modifygruppe welche den Hauptordner nicht löschen, übernehmen und die Berechtigungen anpassen kann.
Dies ist wichtig damit ein User nicht ausversehen den Hauptfolder löschen kann.

Gruss,
Tehral
private Nachricht | Beiträge des Benutzers
Stefan.Haegele
myCSharp.de - Member

Avatar #avatar-3068.jpg


Dabei seit:
Beiträge: 454
Herkunft: Untermeitingen

beantworten | zitieren | melden

Nur mal so kurz meine Anmerkung dazu:
  • Zum Ändern der Berechtigungen benötigt das Programm/APP Administrationsrechte
  • Warum setzt du die Berechtigung nicht bei der Installation?
  • Berechtigungen werden normalerweise nur für Gruppen und nicht für Benutzer vergeben
  • Schau dir die Verwendung/Funktion von Vererbung(FileSystem) an
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Stefan.Haegele am .
private Nachricht | Beiträge des Benutzers