CQRS, Clean architecture - autoryzacja i kontrola dostępu

CQRS, Clean architecture - autoryzacja i kontrola dostępu
EZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
1

Cześć, piszę sobie prosty komunikator wykorzystując CQRS oraz Clean architecture i zastanawiam się w jaki sposób najlepiej zaimplementować kontrolę dostępu do danego zasobu.

Obecnie robię to w ten sposób, że na poziomie Spring'owych kontrolerów wyciągam zalogowanego użytkownika oraz przekazuję jego id/username do komendy lub zapytania. W tym rozwiązaniu każdy zasób wymagający kontroli dostępu wymaga przekazania do komendy/zapytania id/username użytkownika, który wykonuje daną operację. Czy to rozwiązanie jest poprawne i jakie mam alternatywy?

Przykład:

Kopiuj
class ConversationCreateCommand {
    private String creatingUser;
    ...
}
Kopiuj
class MessageSearchQuery {
    private String searchingUser;
    ...
}
WeiXiao
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5227
1

w javie nikt nie używa cqrsa :/

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5550
0
WeiXiao napisał(a):

w javie nikt nie używa cqrsa :/

Rozumiem że byłeś wszędzie i wszystko widziałeś? W takim razie na pewno wiesz co powiedział Odyn Baldurowi przed spaleniem :P

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1912
1

Nie możesz użyć @PreAuthorize itp na warstwie serwisów, przed wejściem w warstwę domenową (tak żeby obiekty domenowe i agregaty nie były skażone Spring Security)?

EZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0
Charles_Ray napisał(a):

Nie możesz użyć @PreAuthorize itp na warstwie serwisów, przed wejściem w warstwę domenową (tak żeby obiekty domenowe i agregaty nie były skażone Spring Security)?

Moja warstwa serwisów - command/query (przypadki użycia) i handlery jako serwisy są poniekąd częścią domeny i raczej nie powinny zawierać spring'owych adnotacji.
Robię tak jak mówisz tylko na najniższej warstwie czyli w moim przypadku warstwie ui (kontrolery).

Charles_Ray
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1912
1

Napisałem „przed wejściem do domeny”. Poczytaj o serwisach aplikacyjnych: https://enterprisecraftsmanship.com/posts/domain-vs-application-services/

EZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0
Charles_Ray napisał(a):

Napisałem „przed wejściem do domeny”. Poczytaj o serwisach aplikacyjnych: https://enterprisecraftsmanship.com/posts/domain-vs-application-services/

Tak, znam pojęcie serwisów aplikacyjnych z DDD, których zadaniem jest zarządzanie obiektami domeny jednak nie powinny zawierać logiki biznesowej. U mnie własnie takimi serwisami aplikacyjnych są handlery, nie widzę jednak powodu żeby uzależniać je od całego frameworka z powodu adnotacji.

danek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 797
0

A co jest złego w przekazaniu usera do Commanda/Query, skoro i tak pewnie sprawdzasz uprawnienia w domenie?

EZ
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 32
0
danek napisał(a):

A co jest złego w przekazaniu usera do Commanda/Query, skoro i tak pewnie sprawdzasz uprawnienia w domenie?

Wydaje mi się, że nic złego, głównie zastanawia mnie skalowalność tego rozwiązania i czy istnieje lepsza alternatywa o której nie pomyślałem.

danek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 797
2

Jeśli sprawdzasz uprawnienia potem w domenie, to i tak jakoś informację o użytkowniku musisz tam przekazać 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.