Czy użytkownik może usunąć rekord

1

Cześć, pytam się czy w .NetCore 2 jest po prostu jakiś wbudowany / zalecany mechanizm do wykonania takiego zadania.

Dajmy na to, że idzie request żeby usunąć zamówienie. Jednak zamówienie może usunąć tylko administrator albo autor tego zamówienia.
W tym momencie robię to tak, że sprawdzam w serwisie, czy zalogowany jest adminem albo czy zalogowany ma id takie jak twórca zamówienia. Czy jest do tego jakaś inna lepsza droga? Myślałem o Policy, ale tutaj chyba to nie wypali. Mam różne modele, które mogą być usuwane.

1

Własny atrybut autoryzacyjny na akcji?

0

Ale w .tym atrybucie i tak trzeba by sprawdzać czy zalogowany user to admin lub autor.

1
jacek.placek napisał(a):

Ale w .tym atrybucie i tak trzeba by sprawdzać czy zalogowany user to admin lub autor.

No zawsze będzie trzeba, bo tak wygląda autoryzacja, ale warto to robić w odpowiednim miejscu.

2

I atrybut to odpowiednie miejsce to tego? To raczej nie jest kwestia czy user może wykonać akcje delete bo może tylko logiki biznesowej. Bo na razie jest admin lub autor A potem może być grupa userow, userzy w jakimś oddziale, status rekordu i mnóstwo innych ograniczeń biznesowych.

0

Dawno temu w jednym projekcie zrobiłem do analogicznego zadania właśnie atrybut (który oczywiście używał jakiegoś serwisu, który z kolei pytał bazę). Jakiś wielkich wad tego rozwiązania wtedy nie widziałem, ale teraz bym tak nie zrobił, bo to jednak jest taki trochę słaby design (umieszczanie logiki biznesowej w warstwie prezentacji).
Z drugiej strony, to problem trochę podobny do tego, gdzie umieszczać walidację - czy przy kontrolerach, czy w logice biznesowej. Odpowiedź na oba te pytania niekoniecznie jest oczywista.

0
somekind napisał(a):

Dawno temu w jednym projekcie zrobiłem do analogicznego zadania właśnie atrybut (który oczywiście używał jakiegoś serwisu, który z kolei pytał bazę). Jakiś wielkich wad tego rozwiązania wtedy nie widziałem, ale teraz bym tak nie zrobił, bo to jednak jest taki trochę słaby design (umieszczanie logiki biznesowej w warstwie prezentacji).
Z drugiej strony, to problem trochę podobny do tego, gdzie umieszczać walidację - czy przy kontrolerach, czy w logice biznesowej. Odpowiedź na oba te pytania niekoniecznie jest oczywista.

@somekind W MVC kontrolery są w warstwie prezentacji, ale przy SPA już taki WebApi kontroler już chyba niekoniecznie? Taką logikę też można wydzielić w jedno miejsce i używać w tym atrybucie. Dla mnie jedna z głównych zalet tego rozwiazania jest to że endpoint jest bezpieczny od samego początku. Przy sprawdzaniu tego głębiej w aplikacji, ktoś przy rozszerzeniu logiki może zapomnieć żeby to sprawdzić. Poza tym tak jak powiedziałeś ta logika i tak będzie wyciekac do warstwy prezentacji gdy chcemy coś pokazać/umożliwić/zwalidowac po stronie widoku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0