Zazwyczaj decyzje dotyczące autoryzacji umieszczam w moich kontrolerach po stronie serwera. To były ostatnio punkty końcowe RESTful, ale myślę, że to samo dotyczy architektur typu MVC. Dla argumentu załóżmy, że jest to autoryzacja oparta na rolach. Metoda chroniona zostanie opatrzona adnotacjami lub sprawdzi i zwróci 403 w razie potrzeby.
Teraz, biorąc pod uwagę, że autoryzacja jest w rzeczywistości regułą biznesową - na przykład „tylko administratorzy mogą wymienić X”, myślę, że powinni zostać zepchnięci na dół. Gdy kontroler prosi warstwę biznesową o wykonanie operacji, warstwa usługowa lub biznesowa informuje kontrolera, że nie jest autoryzowana.
Czy to rozsądne podejście? Czy są to wady?
Nienawidzę posiadania usługi AuthorisationService, która zasadniczo zawiera kilka statycznych, kodowanych reguł proceduralnych, aby to zrobić, ale być może ma sens utrzymanie całej logiki dostępu w jednym miejscu. Czy to kwestia przekrojowa, którą należy oddzielić?
Pytam więc, czy ktoś to zrobił i jak udało mu się to osiągnąć w czysty sposób, czy też czy są jakieś dobre zasoby, które mógłbym przeczytać. Używam Java Fwiw, ale jest to pytanie agnostyczne języka.
Sprawdziłem pokrewne pytania tutaj i są bardzo cienkie na ziemi i odpowiedzi. Na przykład: Sprawdzanie poprawności i autoryzacja w modelach domen i przenoszenie jej przez warstwę usług do MVC
Czytam wiosenne dokumenty bezpieczeństwa, które stanowią dobry argument za tym, że jest to problem przekrojowy, ale martwię się, że to tylko „wiosenna droga” i chciałbym szerszych perspektyw. Powiązuje również twoją aplikację z konkretną strukturą.