Przeglądanie nowych zachowań potoku funkcji Mediatr 3.0 w celu uwierzytelnienia/autoryzacji.Mediatr 3.0 Używanie zachowania potoków do uwierzytelniania
Czy normalnie autoryzowałbyś się na podstawie wiadomości lub obsługi? powodem, dla którego pytam, jest to, żebym był autoryzowany w programie obsługi (tak samo jak kontroler w MVC), ale zachowania nie wydają się mieć wiedzy o obsłudze, więc nie jestem pewien, czy jest to możliwe/odpowiednie.
Mogę dodać interfejs znacznika IAuthorisationRequired do każdej wiadomości, ale jeśli wiadomość jest powiadomieniem/zdarzeniem i ma wiele procedur obsługi, to może niektóre powinny zostać uruchomione, ale inne nie. Naprawdę czuję się lepiej sprawdzając auth na kodzie obsługi, który wykonuje rzeczywistą pracę.
Chciałbym móc umieścić atrybut [Autoryzuj] na funkcji obsługi i użytkownika, aby to sprawdzić (obecnie robię to dokładnie, ale z klasą bazową zamiast zachowania).
public class AuthenticationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
public Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next)
{
//Can't access handler class here, so how do I know the action requires authentication/authorization?
return next();
}
}
[Authorize]
public class ChangePasswordRequestHandler : IAsyncRequestHandler<ChangePassword, ReponseType>
{
protected override async Task<ReponseType> Handle(AsyncRequestBase<ChangePassword> message)
{
//change users password here
}
}
Ogólnie rzecz biorąc, nie byłem zadowolony z żadnego z proponowanych rozwiązań i w końcu trzymałem się mojego wstępnego rozwiązania 3.0. Autoryzacja powinna być powiązana z daną czynnością, a nie z komunikatem. – Betty