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;
|
||||
|
||||
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; }
|
||||
}
|
||||
|
||||
[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 ()
|
||||
@ -20,8 +21,26 @@ public class DirectorySearchQueryHandler(IOptions<ActiveDirectoryOptions> option
|
||||
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