Add automatic NTFS traverse ensure
This commit is contained in:
@@ -421,60 +421,112 @@ namespace LiamWorkflowActivities
|
||||
|
||||
var allowFolderEnsure = IsAdditionalConfigurationEnabled(provider, "EnsureNtfsPermissionGroups");
|
||||
var allowSharePathEnsure = IsAdditionalConfigurationEnabled(provider, "EnsureNtfsPermissionGroupsForShares");
|
||||
if (!allowFolderEnsure && !allowSharePathEnsure)
|
||||
var allowTraverseEnsure = IsAdditionalConfigurationEnabled(provider, "EnsureNtfsTraverseGroups");
|
||||
if (!allowFolderEnsure && !allowSharePathEnsure && !allowTraverseEnsure)
|
||||
return true;
|
||||
|
||||
foreach (var ntfsArea in dataAreas
|
||||
.Where(dataArea =>
|
||||
allowFolderEnsure && dataArea is cLiamNtfsFolder
|
||||
|| allowSharePathEnsure && dataArea is cLiamNtfsShare)
|
||||
.Cast<cLiamNtfsPermissionDataAreaBase>())
|
||||
if (allowFolderEnsure || allowSharePathEnsure)
|
||||
{
|
||||
var folderPath = ntfsArea.TechnicalName;
|
||||
if (string.IsNullOrWhiteSpace(folderPath))
|
||||
continue;
|
||||
|
||||
if (!Directory.Exists(folderPath))
|
||||
foreach (var ntfsArea in dataAreas
|
||||
.Where(dataArea =>
|
||||
allowFolderEnsure && dataArea is cLiamNtfsFolder
|
||||
|| allowSharePathEnsure && dataArea is cLiamNtfsShare)
|
||||
.Cast<cLiamNtfsPermissionDataAreaBase>())
|
||||
{
|
||||
LogEntry($"Skipping automatic NTFS permission group ensure for '{folderPath}' because the directory does not exist.", LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
var folderPath = ntfsArea.TechnicalName;
|
||||
if (string.IsNullOrWhiteSpace(folderPath))
|
||||
continue;
|
||||
|
||||
var ensureResult = await ntfsProvider.EnsureMissingPermissionGroupsAsync(
|
||||
folderPath,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
allowSharePathEnsure,
|
||||
ntfsArea is cLiamNtfsFolder || ntfsArea is cLiamNtfsShare,
|
||||
simulateOnly);
|
||||
if (ensureResult == null)
|
||||
if (!Directory.Exists(folderPath))
|
||||
{
|
||||
LogEntry($"Skipping automatic NTFS permission group ensure for '{folderPath}' because the directory does not exist.", LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
|
||||
var ensureResult = await ntfsProvider.EnsureMissingPermissionGroupsAsync(
|
||||
folderPath,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
null,
|
||||
allowSharePathEnsure,
|
||||
!allowTraverseEnsure && (ntfsArea is cLiamNtfsFolder || ntfsArea is cLiamNtfsShare),
|
||||
simulateOnly);
|
||||
if (ensureResult == null)
|
||||
{
|
||||
var providerMessage = ntfsProvider.GetLastErrorMessage() ?? "Provider returned no result.";
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure skipped for '{folderPath}' because the provider returned no result. ProviderMessage='{providerMessage}'",
|
||||
LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ensureResult.resultErrorId != 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure skipped for '{folderPath}' after resultErrorId={ensureResult.resultErrorId}. ResultMessage='{ensureResult.resultMessage ?? string.Empty}'",
|
||||
LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (simulateOnly)
|
||||
{
|
||||
LogAutomaticNtfsEnsurePreviewDebug(folderPath, ensureResult, "permission group ensure");
|
||||
result.AutomaticEnsurePreview.Add(MapAutomaticEnsurePreview(folderPath, ensureResult));
|
||||
continue;
|
||||
}
|
||||
|
||||
LogAutomaticNtfsEnsureDebug(folderPath, ensureResult, "permission group ensure");
|
||||
await ntfsArea.ResolvePermissionGroupsAsync(folderPath);
|
||||
}
|
||||
}
|
||||
|
||||
if (allowTraverseEnsure)
|
||||
{
|
||||
foreach (var ntfsArea in dataAreas
|
||||
.Where(dataArea => dataArea is cLiamNtfsFolder || dataArea is cLiamNtfsShare)
|
||||
.Cast<cLiamNtfsPermissionDataAreaBase>())
|
||||
{
|
||||
var providerMessage = ntfsProvider.GetLastErrorMessage() ?? "Provider returned no result.";
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure skipped for '{folderPath}' because the provider returned no result. ProviderMessage='{providerMessage}'",
|
||||
LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
var folderPath = ntfsArea.TechnicalName;
|
||||
if (string.IsNullOrWhiteSpace(folderPath))
|
||||
continue;
|
||||
|
||||
if (ensureResult.resultErrorId != 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure skipped for '{folderPath}' after resultErrorId={ensureResult.resultErrorId}. ResultMessage='{ensureResult.resultMessage ?? string.Empty}'",
|
||||
LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
if (!Directory.Exists(folderPath))
|
||||
{
|
||||
LogEntry($"Skipping automatic NTFS traverse group ensure for '{folderPath}' because the directory does not exist.", LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (simulateOnly)
|
||||
{
|
||||
LogAutomaticNtfsEnsurePreviewDebug(folderPath, ensureResult);
|
||||
result.AutomaticEnsurePreview.Add(MapAutomaticEnsurePreview(folderPath, ensureResult));
|
||||
continue;
|
||||
}
|
||||
var ensureResult = await ntfsProvider.EnsureTraverseGroupsAsync(
|
||||
folderPath,
|
||||
null,
|
||||
simulateOnly);
|
||||
if (ensureResult == null)
|
||||
{
|
||||
var providerMessage = ntfsProvider.GetLastErrorMessage() ?? "Provider returned no result.";
|
||||
LogEntry(
|
||||
$"Automatic NTFS traverse group ensure skipped for '{folderPath}' because the provider returned no result. ProviderMessage='{providerMessage}'",
|
||||
LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
|
||||
LogAutomaticNtfsEnsureDebug(folderPath, ensureResult);
|
||||
await ntfsArea.ResolvePermissionGroupsAsync(folderPath);
|
||||
if (ensureResult.resultErrorId != 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS traverse group ensure skipped for '{folderPath}' after resultErrorId={ensureResult.resultErrorId}. ResultMessage='{ensureResult.resultMessage ?? string.Empty}'",
|
||||
LogLevels.Warning);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (simulateOnly)
|
||||
{
|
||||
LogAutomaticNtfsEnsurePreviewDebug(folderPath, ensureResult, "traverse group ensure");
|
||||
result.AutomaticEnsurePreview.Add(MapAutomaticEnsurePreview(folderPath, ensureResult));
|
||||
continue;
|
||||
}
|
||||
|
||||
LogAutomaticNtfsEnsureDebug(folderPath, ensureResult, "traverse group ensure");
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -496,13 +548,13 @@ namespace LiamWorkflowActivities
|
||||
};
|
||||
}
|
||||
|
||||
private static void LogAutomaticNtfsEnsurePreviewDebug(string folderPath, ResultToken ensureResult)
|
||||
private static void LogAutomaticNtfsEnsurePreviewDebug(string folderPath, ResultToken ensureResult, string operationLabel)
|
||||
{
|
||||
if (ensureResult == null)
|
||||
return;
|
||||
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure preview finished for '{folderPath}'. " +
|
||||
$"Automatic NTFS {operationLabel} preview finished for '{folderPath}'. " +
|
||||
$"WouldCreateGroups={ensureResult.createdGroups.Count}, " +
|
||||
$"WouldReuseGroups={ensureResult.reusedGroups.Count}, " +
|
||||
$"WouldAddAcls={ensureResult.addedAclEntries.Count}, " +
|
||||
@@ -513,13 +565,13 @@ namespace LiamWorkflowActivities
|
||||
LogLevels.Debug);
|
||||
}
|
||||
|
||||
private static void LogAutomaticNtfsEnsureDebug(string folderPath, ResultToken ensureResult)
|
||||
private static void LogAutomaticNtfsEnsureDebug(string folderPath, ResultToken ensureResult, string operationLabel)
|
||||
{
|
||||
if (ensureResult == null)
|
||||
return;
|
||||
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure finished for '{folderPath}'. " +
|
||||
$"Automatic NTFS {operationLabel} finished for '{folderPath}'. " +
|
||||
$"CreatedGroups={ensureResult.createdGroups.Count}, " +
|
||||
$"ReusedGroups={ensureResult.reusedGroups.Count}, " +
|
||||
$"AddedAcls={ensureResult.addedAclEntries.Count}, " +
|
||||
@@ -532,42 +584,42 @@ namespace LiamWorkflowActivities
|
||||
if (ensureResult.createdGroups.Count > 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure detected missing AD groups for '{folderPath}' and created them: {string.Join(", ", ensureResult.createdGroups)}",
|
||||
$"Automatic NTFS {operationLabel} detected missing AD groups for '{folderPath}' and created them: {string.Join(", ", ensureResult.createdGroups)}",
|
||||
LogLevels.Debug);
|
||||
}
|
||||
|
||||
if (ensureResult.reusedGroups.Count > 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure reused existing AD groups for '{folderPath}': {string.Join(", ", ensureResult.reusedGroups)}",
|
||||
$"Automatic NTFS {operationLabel} reused existing AD groups for '{folderPath}': {string.Join(", ", ensureResult.reusedGroups)}",
|
||||
LogLevels.Debug);
|
||||
}
|
||||
|
||||
if (ensureResult.addedAclEntries.Count > 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure added missing ACL entries for '{folderPath}': {string.Join(", ", ensureResult.addedAclEntries)}",
|
||||
$"Automatic NTFS {operationLabel} added missing ACL entries for '{folderPath}': {string.Join(", ", ensureResult.addedAclEntries)}",
|
||||
LogLevels.Debug);
|
||||
}
|
||||
|
||||
if (ensureResult.skippedAclEntries.Count > 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure kept existing ACL entries for '{folderPath}': {string.Join(", ", ensureResult.skippedAclEntries)}",
|
||||
$"Automatic NTFS {operationLabel} kept existing ACL entries for '{folderPath}': {string.Join(", ", ensureResult.skippedAclEntries)}",
|
||||
LogLevels.Debug);
|
||||
}
|
||||
|
||||
if (ensureResult.ensuredTraverseGroups.Count > 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure touched traverse groups for '{folderPath}': {string.Join(", ", ensureResult.ensuredTraverseGroups)}",
|
||||
$"Automatic NTFS {operationLabel} touched traverse groups for '{folderPath}': {string.Join(", ", ensureResult.ensuredTraverseGroups)}",
|
||||
LogLevels.Debug);
|
||||
}
|
||||
|
||||
if (ensureResult.warnings.Count > 0)
|
||||
{
|
||||
LogEntry(
|
||||
$"Automatic NTFS permission group ensure produced warnings for '{folderPath}': {string.Join(" | ", ensureResult.warnings)}",
|
||||
$"Automatic NTFS {operationLabel} produced warnings for '{folderPath}': {string.Join(" | ", ensureResult.warnings)}",
|
||||
LogLevels.Debug);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user