feat(DirectorySearchQuery): Implementierung von DirectorySearchQueryHandler mit Eigenschaftsfilterung und Ergebnissammlung
- Aktualisierung von DirectorySearchQuery, um Eigenschaften zu akzeptieren und IEnumerable<ResultPropertyCollection> zurückzugeben - Implementierung von DirectorySearchQueryHandler, um die Suche mit benutzerdefinierten Filtern, Bereichen und Eigenschaftsauswahl auszuführen - Hinzufügen einer Logik, um nur angeforderte Eigenschaften zu laden, wenn diese angegeben sind - Ersetzen von NotImplementedException durch die tatsächliche DirectorySearcher-Logik
This commit is contained in:
parent
e75127c74e
commit
452cc6345c
@ -4,13 +4,14 @@ using System.DirectoryServices;
|
|||||||
|
|
||||||
namespace DigitalData.ActiveDirectory;
|
namespace DigitalData.ActiveDirectory;
|
||||||
|
|
||||||
public record DirectorySearchQuery(string? Filter = null, SearchScope Scope = SearchScope.Subtree, int SizeLimit = 5000) : IRequest
|
public record DirectorySearchQuery(string? Filter = null, SearchScope Scope = SearchScope.Subtree, int SizeLimit = 5000, params string[] properties)
|
||||||
|
: IRequest<IEnumerable<ResultPropertyCollection>>
|
||||||
{
|
{
|
||||||
public Action<DirectorySearcher>? Options { get; set; }
|
public Action<DirectorySearcher>? Options { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "<Pending>")]
|
[System.Diagnostics.CodeAnalysis.SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "<Pending>")]
|
||||||
public class DirectorySearchQueryHandler(IOptions<ActiveDirectoryOptions> options) : IRequestHandler<DirectorySearchQuery>
|
public class DirectorySearchQueryHandler(IOptions<ActiveDirectoryOptions> options) : IRequestHandler<DirectorySearchQuery, IEnumerable<ResultPropertyCollection>>
|
||||||
{
|
{
|
||||||
|
|
||||||
public DirectoryEntry DirectoryEntry => new ()
|
public DirectoryEntry DirectoryEntry => new ()
|
||||||
@ -20,8 +21,26 @@ public class DirectorySearchQueryHandler(IOptions<ActiveDirectoryOptions> option
|
|||||||
Password = options.Value.Password
|
Password = options.Value.Password
|
||||||
};
|
};
|
||||||
|
|
||||||
public Task Handle(DirectorySearchQuery request, CancellationToken cancellationToken)
|
public Task<IEnumerable<ResultPropertyCollection>> Handle(DirectorySearchQuery request, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
return Task.Run(() =>
|
||||||
|
{
|
||||||
|
using var _dirEntry = DirectoryEntry;
|
||||||
|
using var searcher = new DirectorySearcher()
|
||||||
|
{
|
||||||
|
Filter = request.Filter,
|
||||||
|
SearchScope = request.Scope,
|
||||||
|
SizeLimit = request.SizeLimit,
|
||||||
|
SearchRoot = _dirEntry
|
||||||
|
};
|
||||||
|
|
||||||
|
request.Options?.Invoke(searcher);
|
||||||
|
|
||||||
|
if (request.properties.Length > 0)
|
||||||
|
searcher.PropertiesToLoad.Clear();
|
||||||
|
|
||||||
|
searcher.PropertiesToLoad.AddRange([.. request.properties.Where(p => p is not null)]);
|
||||||
|
return searcher.FindAll().Cast<SearchResult>().Select(r => r.Properties);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user