Create NTFS traverse groups lazily
This commit is contained in:
@@ -656,6 +656,29 @@ namespace C4IT_IAM_SET
|
||||
continue;
|
||||
}
|
||||
|
||||
if (PathsEqual(parent.FullName, sourcePath) && string.IsNullOrWhiteSpace(traverseGroupName))
|
||||
{
|
||||
DefaultLogger.LogEntry(LogLevels.Debug, $"Skip own Traverse-Gruppe fuer '{parent.FullName}' because no child permission or traverse group needs it.");
|
||||
if (IsTraverseBoundaryPath(parent.FullName))
|
||||
break;
|
||||
|
||||
parent = parent.Parent;
|
||||
if (parent != null)
|
||||
{
|
||||
currentTraverseLevel = hasTraverseBoundary
|
||||
? currentTraverseLevel + 1
|
||||
: DataArea.GetRelativePath(parent.FullName, baseFolder).Count(n => n == Path.DirectorySeparatorChar);
|
||||
if (!hasTraverseBoundary)
|
||||
defaultTraverseLoopIndex--;
|
||||
DefaultLogger.LogEntry(LogLevels.Debug, $"Neue Ebene (lvl) nach Lazy-Skip: {currentTraverseLevel}");
|
||||
}
|
||||
else
|
||||
{
|
||||
DefaultLogger.LogEntry(LogLevels.Debug, "Parent nach Lazy-Skip ist null.");
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
DefaultLogger.LogEntry(LogLevels.Debug, $"Hole ACL für Ordner: {parent.FullName}");
|
||||
AuthorizationRuleCollection ACLs = null;
|
||||
try
|
||||
|
||||
@@ -252,6 +252,8 @@ Traverse-only sucht die erwarteten LIAM-Owner/Write/Read-Gruppen anhand der Nami
|
||||
|
||||
Fuer AGP werden die Global-Gruppen auf der ACL und als Traverse-Mitglieder verwendet. Fuer AGDLP liegen weiterhin die DomainLocal-Gruppen auf der NTFS-ACL; die Traverse-Mitgliedschaft verwendet die zugehoerigen Global-Gruppen.
|
||||
|
||||
Traverse-Gruppen werden lazy erzeugt: LIAM legt eine Traverse-Gruppe fuer einen Pfad nur dann an, wenn darunter mindestens eine LIAM-Owner/Write/Read-Gruppe oder eine darunterliegende Traverse-Gruppe aufgenommen werden soll. Bestehende Traverse-Gruppen werden weiterverwendet, leere neue Traverse-Gruppen ohne aktuelle Mitglieder werden aber nicht vorsorglich erzeugt.
|
||||
|
||||
#### Traverse-Grenze
|
||||
|
||||
`NtfsTraverseBoundaryPath` begrenzt, bis zu welcher Ebene Traverse-Gruppen und Traverse-ACLs sichergestellt werden. Ohne Boundary orientiert sich die Traverse-Verarbeitung an den normal verwalteten Permission-Pfaden. Mit Boundary darf die Traverse-Verarbeitung auch Pfade oberhalb des Include-Filters erreichen, solange der Pfad existiert und nicht durch `NtfsExcludePaths` ausgeschlossen ist.
|
||||
@@ -265,7 +267,7 @@ NtfsTraverseBoundaryPath=\\intra.brkr.corp\File_Shares\BRE.01.LEW\Projekte
|
||||
EnsureNtfsTraverseGroups=1
|
||||
```
|
||||
|
||||
In diesem Beispiel koennen Traverse-Gruppen fuer `...\Projekte` selbst und fuer die Ordner darunter sichergestellt werden. Der Boundary-Pfad selbst ist gueltig; er muss nicht zusaetzlich als `NtfsIncludePaths`-Match enthalten sein, solange es nur um Traverse geht.
|
||||
In diesem Beispiel koennen Traverse-Gruppen fuer `...\Projekte` selbst und fuer die Ordner darunter sichergestellt werden, sobald darunter Berechtigungsgruppen oder weitere Traverse-Gruppen aufzunehmen sind. Der Boundary-Pfad selbst ist gueltig; er muss nicht zusaetzlich als `NtfsIncludePaths`-Match enthalten sein, solange es nur um Traverse geht.
|
||||
|
||||
#### Levelbereiche fuer Ensure und Ordneranlage
|
||||
|
||||
|
||||
Reference in New Issue
Block a user