Usuwanie obecnie zalogowanego użytkownika

0

Hej, piszę sobie API i mam dwa typy userów Admin/User. Mam endpoint /user/id na którym DELETE usuwa użytkownika o wskazanym id. Jeżeli żądanie wysyła użytkownik typu admin powinien mieć on prawo usunięcia dowolnego usera o dowolnym id. Natomiast w przypadku zwyklego użytkownika User chciałbym, żeby miał on możliwość usunięcia jedynie własnego konta - wysłanie żądania o id innym niż jego powinno zwracać błąd.

Teraz zastanawiam się w jaki sposób to powinno być zrealizowane na tym endpoincie, od czego najlepiej byłoby uzależnić rodzaj działania endpointa?

1

Od roli użytkownika. Zakładając że przypisujesz użytkownikowi jakąś.
W samej aplikacji to trzeba tylko sprawdzić czy użytkownik ma odpowiednie uprawnienia.

0
var napisał(a):

Od roli użytkownika. Zakładając że przypisujesz użytkownikowi jakąś.
W samej aplikacji to trzeba tylko sprawdzić czy użytkownik ma odpowiednie uprawnienia.

Ale przecież właśnie mówię powyżej, że w tym wypadku nie wystarczy od samej roli użytkownika.
Rola Admin - użytkownik może usuwać wszystkich, siebie i innych.
Rola User - użytkownik może usunąć jedynie siebie, innych nie może.

1

Nigdy, NIGDY, NIEEEEEE nie usuwaj użytkowników z bazy. Rozwalisz sobie dane audytowe itp. Nie wspomnę już o tym jak się potem inny użytkownik ze zduplikowanym Id utworzy. Po prostu oznacz użytkownika jako usuniętego w DB (soft-delete). Lub nawet lepiej niech to nie będzie usuwanie tylko wyłączanie/ban/blokada.

W zależności od tego jakiego mechanizmu auth uzywasz będzie to sprawdzenie po roli lub po claim'ie (OpenAuth) lub po bardziej rozbudowanym systemie uprawnień (jeżeli takiego używasz).
W tym konkretnym wypadku w połączeniu z mega prostym if'em if(removedUser.id != currentUser.id && !isAdmin()) deny(); Który może nawet się znajdowac na poziomie repo. Security ma swoje prawidła które nie zawsze idą w parze z dobrym designem.

Inna spraw że jak np. admin usunie użytkownika to ten powinien być od razu docięty od systemu - a nie do czasu zakończenia sesji (czasami można jakieś okno 15 min tolerować ale raczej nie w apkach bankowych).

Pamiętaj o zabezpieczeniu żeby nie dało się usunąć ostatniego konta admina bo inaczej czeka Ciebie podróż do DB.

0

Korzystam z tokenów jwt.

0
0xmarcin napisał(a):

Nigdy, NIGDY, NIEEEEEE nie usuwaj użytkowników z bazy. Rozwalisz sobie dane audytowe itp. Nie wspomnę już o tym jak się potem inny użytkownik ze zduplikowanym Id utworzy. Po prostu oznacz użytkownika jako usuniętego w DB (soft-delete). Lub nawet lepiej niech to nie będzie usuwanie tylko wyłączanie/ban/blokada.

Coś mi się wydaje, że często to nadużywanie soft deleta to wynik lenistwa, bo znacznie prościej i szybciej.

Jeżeli użytkownik zechce abyś usunął jego dane, to co zrobisz? anonimizacja? i teraz pytanie czy coś faktycznie będziesz mógł wyciągnąć z takich danych, no bo jeżeli nie, to tylko syf w bazie trzymasz (co teoretycznie nie powinno być problemem)

0
kamilos95 napisał(a):
var napisał(a):

Od roli użytkownika. Zakładając że przypisujesz użytkownikowi jakąś.
W samej aplikacji to trzeba tylko sprawdzić czy użytkownik ma odpowiednie uprawnienia.

Ale przecież właśnie mówię powyżej, że w tym wypadku nie wystarczy od samej roli użytkownika.
Rola Admin - użytkownik może usuwać wszystkich, siebie i innych.
Rola User - użytkownik może usunąć jedynie siebie, innych nie może

Masz 2 typy użytkowników
a) Admin
b) User

Chcesz wystawić jeden endpoint do którego może strzelić zarówno Admin jak i User, ale

  1. użytkownik o typie Admin może usunąć dowolnego użytkownika
  2. użytkownik o typie User może usunąć tylko i wyłącznie swoje konto

Różnicowanie polega wyłącznie na sprawdzeniu czy użytkownik ma przypisaną rolę administratora czy nie. Tak więc w zupełności wystarczy. Chyba że implementowałeś autoryzację w jakiś sobie tylko znany sposób i nie używasz mechanizmu ról dostarczanego przez framework. W takim to przypadku również musisz sobie sprawdzić czy użytkownik ma takowe uprawnienia. Samego endpointa nie powinieneś ruszać, on ma tylko przyjąć żądanie, przekazać je do warstwy logiki biznesowej i zwrócić wynik.

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