Avoid own permission groups in traverse group

This commit is contained in:
Meik
2026-07-10 08:46:08 +02:00
parent 2f1ab27ce9
commit 077bac99ae

View File

@@ -571,7 +571,8 @@ namespace C4IT_IAM_SET
var currentTraverseLevel = lvl; var currentTraverseLevel = lvl;
var defaultTraverseLoopIndex = lvl; var defaultTraverseLoopIndex = lvl;
var hasTraverseBoundary = !string.IsNullOrWhiteSpace(GetNormalizedTraverseBoundaryPath()); var hasTraverseBoundary = !string.IsNullOrWhiteSpace(GetNormalizedTraverseBoundaryPath());
var processedNearestTraverseParent = false; var sourcePath = NormalizeDirectoryPath(newDataArea.IAM_Folders[0].technicalName);
var sourcePermissionGroupsAdded = false;
// Überprüfen der Templates // Überprüfen der Templates
if (templates == null) if (templates == null)
@@ -935,64 +936,72 @@ namespace C4IT_IAM_SET
if (parentTraverseGroup != null || !string.IsNullOrWhiteSpace(parentTraverseGroupName)) if (parentTraverseGroup != null || !string.IsNullOrWhiteSpace(parentTraverseGroupName))
{ {
var displayTraverseGroupName = parentTraverseGroup?.Name ?? parentTraverseGroupName; var displayTraverseGroupName = parentTraverseGroup?.Name ?? parentTraverseGroupName;
if (!processedNearestTraverseParent) var isSourceTraversePath = PathsEqual(parent.FullName, sourcePath);
if (!sourcePermissionGroupsAdded)
{ {
DefaultLogger.LogEntry(LogLevels.Debug, "Verarbeite SecurityGroups bei oberster Ebene."); if (isSourceTraversePath)
foreach (var currentSecGroup in newSecurityGroups.IAM_SecurityGroups)
{ {
if (currentSecGroup == null) DefaultLogger.LogEntry(LogLevels.Debug, $"Skip direct permission group membership for own Traverse-Gruppe '{displayTraverseGroupName}' on '{parent.FullName}'.");
}
else
{
DefaultLogger.LogEntry(LogLevels.Debug, "Verarbeite SecurityGroups in erster uebergeordneter Traverse-Gruppe.");
foreach (var currentSecGroup in newSecurityGroups.IAM_SecurityGroups)
{ {
DefaultLogger.LogEntry(LogLevels.Error, "currentSecGroup ist null."); if (currentSecGroup == null)
continue; {
} DefaultLogger.LogEntry(LogLevels.Error, "currentSecGroup ist null.");
if (currentSecGroup.Scope != GroupScope.Global) continue;
continue; }
if (IsSameGroupName(currentSecGroup.Name, displayTraverseGroupName)) if (currentSecGroup.Scope != GroupScope.Global)
{ continue;
DefaultLogger.LogEntry(LogLevels.Debug, $"Skip self membership for Traverse-Gruppe '{displayTraverseGroupName}'."); if (IsSameGroupName(currentSecGroup.Name, displayTraverseGroupName))
continue; {
DefaultLogger.LogEntry(LogLevels.Debug, $"Skip self membership for Traverse-Gruppe '{displayTraverseGroupName}'.");
continue;
}
if (WhatIf)
{
resultToken.warnings.Add($"Traverse-Gruppe '{displayTraverseGroupName}' würde Mitglied '{currentSecGroup.Name}' erhalten.");
continue;
}
if (!TryEnsureGlobalGroupMembershipWithRetry(domainContext, parentTraverseGroup, currentSecGroup))
continue;
} }
if (WhatIf) sourcePermissionGroupsAdded = true;
{ }
resultToken.warnings.Add($"Traverse-Gruppe '{displayTraverseGroupName}' würde Mitglied '{currentSecGroup.Name}' erhalten."); }
continue;
}
if (!TryEnsureGlobalGroupMembershipWithRetry(domainContext, parentTraverseGroup, currentSecGroup)) if (!string.IsNullOrWhiteSpace(traverseGroupName))
continue;
}
traverseGroup = parentTraverseGroup;
traverseGroupName = displayTraverseGroupName;
processedNearestTraverseParent = true;
}
else
{ {
if (!string.IsNullOrWhiteSpace(traverseGroupName)) try
{ {
try if (IsSameGroupName(displayTraverseGroupName, traverseGroupName))
{ {
if (IsSameGroupName(displayTraverseGroupName, traverseGroupName)) DefaultLogger.LogEntry(LogLevels.Debug, $"Skip nested self membership for Traverse-Gruppe '{displayTraverseGroupName}'.");
{
DefaultLogger.LogEntry(LogLevels.Debug, $"Skip nested self membership for Traverse-Gruppe '{displayTraverseGroupName}'.");
}
else if (WhatIf)
{
resultToken.warnings.Add($"Traverse-Gruppe '{displayTraverseGroupName}' würde verschachtelte Gruppe '{traverseGroupName}' erhalten.");
}
else if (traverseGroup != null && parentTraverseGroup != null && !parentTraverseGroup.Members.Contains(traverseGroup))
{
if (!TryEnsureNestedTraverseGroupMembershipWithRetry(parentTraverseGroup, traverseGroup))
continue;
}
} }
catch (Exception ex) else if (WhatIf)
{ {
DefaultLogger.LogEntry(LogLevels.Error, $"Fehler beim Hinzufügen der Traverse-Gruppe: {ex.Message}"); resultToken.warnings.Add($"Traverse-Gruppe '{displayTraverseGroupName}' würde verschachtelte Gruppe '{traverseGroupName}' erhalten.");
continue; }
else if (traverseGroup != null && parentTraverseGroup != null && !parentTraverseGroup.Members.Contains(traverseGroup))
{
if (!TryEnsureNestedTraverseGroupMembershipWithRetry(parentTraverseGroup, traverseGroup))
continue;
} }
} }
catch (Exception ex)
{
DefaultLogger.LogEntry(LogLevels.Error, $"Fehler beim Hinzufügen der Traverse-Gruppe: {ex.Message}");
continue;
}
} }
traverseGroup = parentTraverseGroup;
traverseGroupName = displayTraverseGroupName;
try try
{ {
if (!WhatIf && parentTraverseGroup != null) if (!WhatIf && parentTraverseGroup != null)