Derive NTFS traverse scope from group strategy
This commit is contained in:
@@ -1101,11 +1101,24 @@ namespace C4IT.LIAM
|
|||||||
private IEnumerable<IAM_SecurityGroupTemplate> BuildSecurityGroupTemplates()
|
private IEnumerable<IAM_SecurityGroupTemplate> BuildSecurityGroupTemplates()
|
||||||
{
|
{
|
||||||
var templates = new List<IAM_SecurityGroupTemplate>();
|
var templates = new List<IAM_SecurityGroupTemplate>();
|
||||||
foreach (var namingConvention in NamingConventions ?? Enumerable.Empty<cLiamNamingConvention>())
|
var namingConventions = (NamingConventions ?? Enumerable.Empty<cLiamNamingConvention>()).ToList();
|
||||||
|
var hasStrategyMatchingTraverseConvention = namingConventions.Any(i =>
|
||||||
|
TryMapSecurityGroupType(i.AccessRole, out var securityGroupType)
|
||||||
|
&& securityGroupType == SecurityGroupType.Traverse
|
||||||
|
&& IsStrategyMatchingTraverseScope(i.Scope));
|
||||||
|
|
||||||
|
foreach (var namingConvention in namingConventions)
|
||||||
{
|
{
|
||||||
if (!TryMapSecurityGroupType(namingConvention.AccessRole, out var securityGroupType))
|
if (!TryMapSecurityGroupType(namingConvention.AccessRole, out var securityGroupType))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (securityGroupType == SecurityGroupType.Traverse
|
||||||
|
&& hasStrategyMatchingTraverseConvention
|
||||||
|
&& !IsStrategyMatchingTraverseScope(namingConvention.Scope))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!TryMapGroupScope(namingConvention.Scope, securityGroupType, out var groupScope))
|
if (!TryMapGroupScope(namingConvention.Scope, securityGroupType, out var groupScope))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@@ -1145,6 +1158,12 @@ namespace C4IT.LIAM
|
|||||||
private bool TryMapGroupScope(eLiamAccessRoleScopes scope, SecurityGroupType type, out GroupScope groupScope)
|
private bool TryMapGroupScope(eLiamAccessRoleScopes scope, SecurityGroupType type, out GroupScope groupScope)
|
||||||
{
|
{
|
||||||
groupScope = GroupScope.Global;
|
groupScope = GroupScope.Global;
|
||||||
|
if (type == SecurityGroupType.Traverse)
|
||||||
|
{
|
||||||
|
groupScope = GetStrategyTraverseGroupScope();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
switch (scope)
|
switch (scope)
|
||||||
{
|
{
|
||||||
case eLiamAccessRoleScopes.Global:
|
case eLiamAccessRoleScopes.Global:
|
||||||
@@ -1154,17 +1173,30 @@ namespace C4IT.LIAM
|
|||||||
groupScope = GroupScope.Local;
|
groupScope = GroupScope.Local;
|
||||||
return true;
|
return true;
|
||||||
case eLiamAccessRoleScopes.Unknown:
|
case eLiamAccessRoleScopes.Unknown:
|
||||||
if (type == SecurityGroupType.Traverse)
|
|
||||||
{
|
|
||||||
groupScope = this.GroupStrategy == eLiamGroupStrategies.Ntfs_AGDLP ? GroupScope.Local : GroupScope.Global;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GroupScope GetStrategyTraverseGroupScope()
|
||||||
|
{
|
||||||
|
return this.GroupStrategy == eLiamGroupStrategies.Ntfs_AGDLP
|
||||||
|
? GroupScope.Local
|
||||||
|
: GroupScope.Global;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool IsStrategyMatchingTraverseScope(eLiamAccessRoleScopes scope)
|
||||||
|
{
|
||||||
|
if (scope == eLiamAccessRoleScopes.Unknown)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
var strategyScope = GetStrategyTraverseGroupScope();
|
||||||
|
return strategyScope == GroupScope.Local
|
||||||
|
? scope == eLiamAccessRoleScopes.DomainLocal
|
||||||
|
: scope == eLiamAccessRoleScopes.Global;
|
||||||
|
}
|
||||||
|
|
||||||
private string GetRequiredCustomTag(string key)
|
private string GetRequiredCustomTag(string key)
|
||||||
{
|
{
|
||||||
if (CustomTags.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value))
|
if (CustomTags.TryGetValue(key, out var value) && !string.IsNullOrWhiteSpace(value))
|
||||||
|
|||||||
@@ -182,6 +182,13 @@ ACL_G_FILE_SHARES_SHARE2_T
|
|||||||
|
|
||||||
Wenn das Traverse-`NamingTemplate` leer ist, ist das kein Fehler. Es wird dann keine neue Traverse-Gruppe angelegt. Bestehende Gruppen werden aber weiterhin ueber ACLs und, sofern gepflegt, ueber `Wildcard` gesucht und konfiguriert. Sind `NamingTemplate` und `Wildcard` leer, ist die Traverse-Verarbeitung fuer diesen Parent ein No-op.
|
Wenn das Traverse-`NamingTemplate` leer ist, ist das kein Fehler. Es wird dann keine neue Traverse-Gruppe angelegt. Bestehende Gruppen werden aber weiterhin ueber ACLs und, sofern gepflegt, ueber `Wildcard` gesucht und konfiguriert. Sind `NamingTemplate` und `Wildcard` leer, ist die Traverse-Verarbeitung fuer diesen Parent ein No-op.
|
||||||
|
|
||||||
|
Der Scope von Traverse-Gruppen wird aus der NTFS-Gruppenstrategie abgeleitet:
|
||||||
|
|
||||||
|
- `Ntfs_AGP`: Traverse-Gruppen werden als Global-Gruppen erstellt
|
||||||
|
- `Ntfs_AGDLP`: Traverse-Gruppen werden als DomainLocal-Gruppen erstellt
|
||||||
|
|
||||||
|
Wenn mehrere Traverse-Naming-Conventions vorhanden sind, wird die zur Strategie passende Konvention bevorzugt. Ist keine passende Konvention vorhanden, wird die vorhandene Traverse-Konvention weiterverwendet, der Scope aber trotzdem strategy-driven gesetzt.
|
||||||
|
|
||||||
### 10. Root-Path-Platzhalter
|
### 10. Root-Path-Platzhalter
|
||||||
|
|
||||||
Naming Conventions koennen zusaetzlich Bestandteile des konfigurierten `RootPath` verwenden. Die Platzhalter funktionieren in `NamingTemplate`, `DescriptionTemplate` und `Wildcard`.
|
Naming Conventions koennen zusaetzlich Bestandteile des konfigurierten `RootPath` verwenden. Die Platzhalter funktionieren in `NamingTemplate`, `DescriptionTemplate` und `Wildcard`.
|
||||||
|
|||||||
Reference in New Issue
Block a user