Repozytorium z kodem
Wstęp
Ten artykuł nie jest poradnikiem programowania dla osoby, która nie ma pojęcia o programowaniu. Ten artykuł jest poradnikiem jak wdrożyć zarządzanie użytkownikami i rolami użytkowników w aplikacji ASP.NET MVC za pomocą Identity, dla osób, które już podstawy ogarniają, więc niektórych prostych rzeczy nie będę dokładnie wyjaśniał.
Krok 1
Najpierw trzeba sobie stworzyć nowy pojekt ASP.NET MVC. W tymże projekcie można kliknąć prawym przyciskiem w eksploratorze rozwiązań na nazwę projektu i wybrać opcję „Dodaj element szkieletowy”. Po wybraniu tam opcji Tożsamość (Identity) i nastepnie odpowiednich opcji (kontekst bazy danych, strony, które mają się wygenerować, itd.), Visual Studio stworzy dla nas szkielet zarządzania użytkownikami. Powstanie Context bazy danych, dużo plików .cshtml, plik Program.cs zostanie zaktualizowany, dodane ostaną tam opcje kontekstu bazy danych i inne ważne rzeczy. NuGety do odpowiednich paczek zostaną doinstalowane i to by było na tyle. Cała logika autoryzacji użytkownika pojawiła się w folderze Areas/Identity.
Krok 2
Następnym krokiem jest skonfigurowanie kilku rzeczy, żeby samo Identity działało. Trzeba w Program.cs dodać app.MapRazorPages, które domyślnie nie są uruchomione w projektach MVC, a strony Identity z nich korzystają. Trzeba również stworzyć bazę danych, wykorzystując konsolę pakietów i wpisać tam „add-migration initialCommit” a następnie „update-database” i w ten sposób Entity Framework w SQLu stworzy nam bazę danych, ale zanim to zrobisz, upewnij się, że Connection String do bazy danych jest odpowiedni. A w kwestii front-endu aplikacji, to dodając partial view do pliku Views/Shared/_Layout.cshtml, w prawym górnym rogu strony pojawią nam się przyciski do logowania/wylogowywania.
Krok 3
Identity już działa, aplikację można już odpalić, stworzyć konto i się na nie zalogować. Więc teraz przechodzimy do etapu dodania zarządzania tymi użytkownikami i ich rolami. Tworzymy nowe kontrolery, jeden dla Ról, drugi dla Użytkowników. W nich tworzymy podstawowe, CRUDowe funkcje zwracające widoki, a dodatkowo w rolach dwie metody, służące do dodawania i usuwania ról dla danego użytkownika (przykładowy kod poniżej). Tworzymy sobie też w menu linki do nich (widoczne na obrazku w kroku 2), żeby łatwo się tam było dostać. Oprócz tego, żeby mieć coś więcej niż standardowe role i użytkowników, tworzymy sobie nowe klasy, które dziedziczą po IdentityRole i IdentityUser. Muszą one zawierać pusty konstruktor, jak i konstruktor taki jaki chcemy, z dodatkowymi polami, które dodaliśmy do swoich klas User i Role, ale żeby to zadziałało, to trzeba też wszędzie gdzie jest wykorzystywany IdentityUser podmienić je na nasze stworzone User (w Program.cs, w stronach Razor od logowania, rejestracji, itd.)
Krok 4
Mając gotowe zaplecze, trzeba zająć się frontem. Tworzymy sobie DTOsy dla Roli i Użytkownika, oraz widoki do dodawania, edytowania, wyświetlania i usuwania Ról oraz Użytkowników. W widoku edycji i dodawania użytkownika trzeba pobawić się z jQuery i AJAXem, żeby asynchronicznie wysyłać zapytania do serwera i wykonywać stworzone wcześniej funkcje dodawania i usuwania ról.
Krok 5
Teraz pora na pare poprawek w Identity – żeby role działały, to Context bazy danych musi dziedziczyć po IdentityDbContext w wersji zawierającej użytkowników, role i string. Tam podajemy stworzone przez siebie klasy User oraz Role, żeby Identity wiedziało, że ma z nich korzystać, a nie z tych domyślnych. W celu łatwego mapowania danych, dodajemy do projektu AutoMappera i konfigurujemy mapy. Z racji, że pozmienialimy trochę w modelu, to trzeba stworzyć kolejną migrację w EF i zaktualizować bazę danych. I tak oto mamy gotowego managera ról i użytkowników w ASP.NET MVC z wykorzystaniem Identity.
Podsumowanie
Mam nadzieję, że taka krótka i zwięzła instrukcja, wraz kodem, w którym śledząc commit po commicie można zobaczyć co było robione, pozwoli Tobie, czytelniku, na zaimplementowanie własnej wersji modułu do zarządzania użytkownikami i rolami 🙂
Poniżej ponownie link do repozytorium.