{"id":182,"date":"2022-12-27T21:20:50","date_gmt":"2022-12-27T20:20:50","guid":{"rendered":"http:\/\/tymek.24x7.pl\/?p=182"},"modified":"2022-12-27T21:34:08","modified_gmt":"2022-12-27T20:34:08","slug":"jak-zrobic-user-i-role-managera-w-asp-net-mvc-z-identity","status":"publish","type":"post","link":"https:\/\/tymek.24x7.pl\/index.php\/2022\/12\/27\/jak-zrobic-user-i-role-managera-w-asp-net-mvc-z-identity\/","title":{"rendered":"Jak zrobi\u0107 User- i Role-Managera w ASP.NET MVC z Identity?"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"182\" class=\"elementor elementor-182\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1aef88d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1aef88d\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4bc9a2e\" data-id=\"4bc9a2e\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d0776ca elementor-widget elementor-widget-heading\" data-id=\"d0776ca\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Repozytorium z kodem<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1865d4b elementor-view-framed elementor-shape-square elementor-widget elementor-widget-icon\" data-id=\"1865d4b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<a class=\"elementor-icon elementor-animation-bounce-in\" href=\"https:\/\/github.com\/twojnarowski\/MVCUserRoleManager\" target=\"_blank\">\n\t\t\t<i aria-hidden=\"true\" class=\"fab fa-github\"><\/i>\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b673815 elementor-widget elementor-widget-heading\" data-id=\"b673815\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Wst\u0119p<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c2e8c99 elementor-widget elementor-widget-text-editor\" data-id=\"c2e8c99\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ten artyku\u0142 nie jest poradnikiem programowania dla osoby, kt\u00f3ra nie ma poj\u0119cia o programowaniu. Ten artyku\u0142 jest poradnikiem jak wdro\u017cy\u0107 zarz\u0105dzanie u\u017cytkownikami i rolami u\u017cytkownik\u00f3w w aplikacji ASP.NET MVC za pomoc\u0105 Identity, dla os\u00f3b, kt\u00f3re ju\u017c podstawy ogarniaj\u0105, wi\u0119c niekt\u00f3rych prostych rzeczy nie b\u0119d\u0119 dok\u0142adnie wyja\u015bnia\u0142.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-549c06d elementor-widget elementor-widget-heading\" data-id=\"549c06d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Krok 1<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4dc0fa4 elementor-widget elementor-widget-text-editor\" data-id=\"4dc0fa4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Najpierw trzeba sobie stworzy\u0107 nowy pojekt ASP.NET MVC. W tym\u017ce projekcie mo\u017cna klikn\u0105\u0107 prawym przyciskiem w eksploratorze rozwi\u0105za\u0144 na nazw\u0119 projektu i wybra\u0107 opcj\u0119 &#8222;Dodaj element szkieletowy&#8221;. Po wybraniu tam opcji To\u017csamo\u015b\u0107 (Identity) i nastepnie odpowiednich opcji (kontekst bazy danych, strony, kt\u00f3re maj\u0105 si\u0119 wygenerowa\u0107, itd.), Visual Studio stworzy dla nas szkielet zarz\u0105dzania u\u017cytkownikami. Powstanie Context bazy danych, du\u017co plik\u00f3w .cshtml, plik Program.cs zostanie zaktualizowany, dodane ostan\u0105 tam opcje kontekstu bazy danych i inne wa\u017cne rzeczy. NuGety do odpowiednich paczek zostan\u0105 doinstalowane i to by by\u0142o na tyle. Ca\u0142a logika autoryzacji u\u017cytkownika pojawi\u0142a si\u0119 w folderze Areas\/Identity.\u00a0<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2d2b6ed elementor-widget elementor-widget-image\" data-id=\"2d2b6ed\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"640\" height=\"103\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1.png\" class=\"attachment-large size-large wp-image-194\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1.png 835w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-300x49.png 300w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-768x124.png 768w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0bd8074 elementor-widget elementor-widget-image\" data-id=\"0bd8074\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"640\" height=\"167\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-1.png\" class=\"attachment-large size-large wp-image-195\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-1.png 948w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-1-300x78.png 300w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-1-768x201.png 768w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-1-850x222.png 850w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b6beae8 elementor-widget elementor-widget-heading\" data-id=\"b6beae8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Krok 2<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1fcf7f1 elementor-widget elementor-widget-text-editor\" data-id=\"1fcf7f1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nast\u0119pnym krokiem jest skonfigurowanie kilku rzeczy, \u017ceby samo Identity dzia\u0142a\u0142o. Trzeba w Program.cs doda\u0107 app.MapRazorPages, kt\u00f3re domy\u015blnie nie s\u0105 uruchomione w projektach MVC, a strony Identity z nich korzystaj\u0105. Trzeba r\u00f3wnie\u017c stworzy\u0107 baz\u0119 danych, wykorzystuj\u0105c konsol\u0119 pakiet\u00f3w i wpisa\u0107 tam &#8222;add-migration initialCommit&#8221; a nast\u0119pnie &#8222;update-database&#8221; i w ten spos\u00f3b Entity Framework w SQLu stworzy nam baz\u0119 danych, ale zanim to zrobisz, upewnij si\u0119, \u017ce Connection String do bazy danych jest odpowiedni. A w kwestii front-endu aplikacji, to dodaj\u0105c partial view do pliku Views\/Shared\/_Layout.cshtml, w prawym g\u00f3rnym rogu strony pojawi\u0105 nam si\u0119 przyciski do logowania\/wylogowywania.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96d6df6 elementor-widget elementor-widget-image\" data-id=\"96d6df6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"640\" height=\"52\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-3-1024x83.png\" class=\"attachment-large size-large wp-image-197\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-3-1024x83.png 1024w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-3-300x24.png 300w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-3-768x62.png 768w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-3-850x69.png 850w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-3.png 1325w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b2ce189 elementor-widget elementor-widget-image\" data-id=\"b2ce189\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"314\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-2.png\" class=\"attachment-large size-large wp-image-196\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-2.png 715w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-2-300x147.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b11928 elementor-widget elementor-widget-image\" data-id=\"4b11928\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"246\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-4.png\" class=\"attachment-large size-large wp-image-198\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-4.png 915w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-4-300x115.png 300w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-4-768x295.png 768w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-4-850x326.png 850w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf32401 elementor-widget elementor-widget-heading\" data-id=\"cf32401\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Krok 3<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-97bd6c3 elementor-widget elementor-widget-text-editor\" data-id=\"97bd6c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Identity ju\u017c dzia\u0142a, aplikacj\u0119 mo\u017cna ju\u017c odpali\u0107, stworzy\u0107 konto i si\u0119 na nie zalogowa\u0107. Wi\u0119c teraz przechodzimy do etapu dodania zarz\u0105dzania tymi u\u017cytkownikami i ich rolami. Tworzymy nowe kontrolery, jeden dla R\u00f3l, drugi dla U\u017cytkownik\u00f3w. W nich tworzymy podstawowe, CRUDowe funkcje zwracaj\u0105ce widoki, a dodatkowo w rolach dwie metody, s\u0142u\u017c\u0105ce do dodawania i usuwania r\u00f3l dla danego u\u017cytkownika (przyk\u0142adowy kod poni\u017cej). Tworzymy sobie te\u017c w menu linki do nich (widoczne na obrazku w kroku 2), \u017ceby \u0142atwo si\u0119 tam by\u0142o dosta\u0107. Opr\u00f3cz tego, \u017ceby mie\u0107 co\u015b wi\u0119cej ni\u017c standardowe role i u\u017cytkownik\u00f3w, tworzymy sobie nowe klasy, kt\u00f3re dziedzicz\u0105 po IdentityRole i IdentityUser. Musz\u0105 one zawiera\u0107 pusty konstruktor, jak i konstruktor taki jaki chcemy, z dodatkowymi polami, kt\u00f3re dodali\u015bmy do swoich klas User i Role, ale \u017ceby to zadzia\u0142a\u0142o, to trzeba te\u017c wsz\u0119dzie gdzie jest wykorzystywany IdentityUser podmieni\u0107 je na nasze stworzone User (w Program.cs, w stronach Razor od logowania, rejestracji, itd.)<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1306a0d elementor-widget elementor-widget-image\" data-id=\"1306a0d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"543\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-8.png\" class=\"attachment-large size-large wp-image-214\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-8.png 752w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-8-300x255.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d382c87 elementor-widget elementor-widget-heading\" data-id=\"d382c87\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Krok 4<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34c0479 elementor-widget elementor-widget-text-editor\" data-id=\"34c0479\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Maj\u0105c gotowe zaplecze, trzeba zaj\u0105\u0107 si\u0119 frontem. Tworzymy sobie DTOsy dla Roli i U\u017cytkownika, oraz widoki do dodawania, edytowania, wy\u015bwietlania i usuwania R\u00f3l oraz U\u017cytkownik\u00f3w. W widoku edycji i dodawania u\u017cytkownika trzeba pobawi\u0107 si\u0119 z jQuery i AJAXem, \u017ceby asynchronicznie wysy\u0142a\u0107 zapytania do serwera i wykonywa\u0107 stworzone wcze\u015bniej funkcje dodawania i usuwania r\u00f3l.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-755e0c3 elementor-widget elementor-widget-image\" data-id=\"755e0c3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"446\" height=\"346\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-5.png\" class=\"attachment-large size-large wp-image-199\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-5.png 446w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-5-300x233.png 300w\" sizes=\"(max-width: 446px) 100vw, 446px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-23c4775 elementor-widget elementor-widget-image\" data-id=\"23c4775\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"549\" height=\"695\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-6.png\" class=\"attachment-large size-large wp-image-200\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-6.png 549w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-6-237x300.png 237w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-6-300x380.png 300w\" sizes=\"(max-width: 549px) 100vw, 549px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5d99263 elementor-widget elementor-widget-heading\" data-id=\"5d99263\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Krok 5<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1a1a035 elementor-widget elementor-widget-text-editor\" data-id=\"1a1a035\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Teraz pora na pare poprawek w Identity &#8211; \u017ceby role dzia\u0142a\u0142y, to Context bazy danych musi dziedziczy\u0107 po IdentityDbContext w wersji zawieraj\u0105cej u\u017cytkownik\u00f3w, role i string. Tam podajemy stworzone przez siebie klasy User oraz Role, \u017ceby Identity wiedzia\u0142o, \u017ce ma z nich korzysta\u0107, a nie z tych domy\u015blnych. W celu \u0142atwego mapowania danych, dodajemy do projektu AutoMappera i konfigurujemy mapy. Z racji, \u017ce pozmienialimy troch\u0119 w modelu, to trzeba stworzy\u0107 kolejn\u0105 migracj\u0119 w EF i zaktualizowa\u0107 baz\u0119 danych. I tak oto mamy gotowego managera r\u00f3l i u\u017cytkownik\u00f3w w ASP.NET MVC z wykorzystaniem Identity.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c4a4c0e elementor-widget elementor-widget-image\" data-id=\"c4a4c0e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"63\" src=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-7.png\" class=\"attachment-large size-large wp-image-201\" alt=\"\" srcset=\"https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-7.png 665w, https:\/\/tymek.24x7.pl\/wp-content\/uploads\/2022\/12\/1-7-300x29.png 300w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-099d1f5 elementor-widget elementor-widget-heading\" data-id=\"099d1f5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Podsumowanie<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7a4b99c elementor-widget elementor-widget-text-editor\" data-id=\"7a4b99c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Mam nadziej\u0119, \u017ce taka kr\u00f3tka i zwi\u0119z\u0142a instrukcja, wraz kodem, w kt\u00f3rym \u015bledz\u0105c commit po commicie mo\u017cna zobaczy\u0107 co by\u0142o robione, pozwoli Tobie, czytelniku, na zaimplementowanie w\u0142asnej wersji modu\u0142u do zarz\u0105dzania u\u017cytkownikami i rolami \ud83d\ude42\u00a0<\/p><p>Poni\u017cej ponownie link do repozytorium.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cd221c5 elementor-widget elementor-widget-heading\" data-id=\"cd221c5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Repozytorium z kodem<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc0f777 elementor-view-framed elementor-shape-square elementor-widget elementor-widget-icon\" data-id=\"fc0f777\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-wrapper\">\n\t\t\t<a class=\"elementor-icon elementor-animation-bounce-in\" href=\"https:\/\/github.com\/twojnarowski\/MVCUserRoleManager\" target=\"_blank\">\n\t\t\t<i aria-hidden=\"true\" class=\"fab fa-github\"><\/i>\t\t\t<\/a>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Ten artyku\u0142 jest poradnikiem jak wdro\u017cy\u0107 zarz\u0105dzanie u\u017cytkownikami i rolami u\u017cytkownik\u00f3w w aplikacji ASP.NET MVC za pomoc\u0105 Identity, dla os\u00f3b, kt\u00f3re ju\u017c podstawy ogarniaj\u0105, wi\u0119c niekt\u00f3rych prostych rzeczy nie b\u0119d\u0119 dok\u0142adnie wyja\u015bnia\u0142.<\/p>\n","protected":false},"author":1,"featured_media":184,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-182","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bez-kategorii"],"_links":{"self":[{"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/posts\/182","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/comments?post=182"}],"version-history":[{"count":34,"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/posts\/182\/revisions"}],"predecessor-version":[{"id":232,"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/posts\/182\/revisions\/232"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/media\/184"}],"wp:attachment":[{"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/media?parent=182"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/categories?post=182"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tymek.24x7.pl\/index.php\/wp-json\/wp\/v2\/tags?post=182"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}