Admin role i User role jako łatwe uwierzytelnianie użytkowników w Laravel 8

Admin role i User role jako łatwe uwierzytelnianie użytkowników w Laravel 8.

Tak jak w tytule stworzyłem prosty mechanizm uwierzytelniania administratorów i użytkowników bez potrzeby tworzenia Klasy Kontrolera Administratora na takie proste podstawowe potrzeby powinno wystarczyć. Co nie znaczy, że takiej klasy nie należy tworzyć.

Oczywiście są zastosowania, że wręcz jest taka klasa potrzebna i to ty musisz rozróżnić, kiedy należy z niej skorzystać. Dobrze żebyś wiedział jakie są jeszcze inne rozwiązania do rozważenia.

Na czym to polega

Polega to na tym, że możemy przypisać dowolną liczbę administratorów oczywiście trzeba podkreślić dowolną, ale bardzo dużo to już lepiej brzmi i przypisać im odpowiednie role w aplikacji. To samo dotyczy użytkowników. Teraz podam przykład zastosowania

Zastosowanie

Stosować możemy takie rozwiązanie z powodzeniem do nadania praw administratorów na forum admin i moderatorzy o dużej liczbie tychże osób, dla przykładu nadałem prawa trzem osobą i tak to przedstawię wam dla jasnego zobrazowania co i jak.

Kolejnym zastosowaniem jest uwierzytelnianie użytkowników zwykłych tak ich nazwijmy choć nie do końca jest to zgodne z prawdą zaraz wyjaśnię, dlaczego. Zacznę od samych praw nadanym użytkownikom na potrzeby tego poradnika. Są na trzech poziomach choć można i więcej tak jak w administratorach, i tu przedstawię do czego można to zastosować?

Można na przykład nadać prawa do usuwania określonych postów, książek ze zbioru przypisanego przez innego usera itd. Do tworzenia nowych zbiorów np. superUser może usuwać wszystkie posty stworzone przez różnych użytkowników dodawać itd.  Ciekawym rozwiązaniem jest to rozwarstwienie na dwa segmenty użytkowników i administratorów, bardzo pomocne, ponieważ można żonglować uprawnieniami pomiędzy nimi. Administrator może także przyjąć rolę superUsera w niektórych przypadkach ma to sens, ponieważ może on zarządzać wszystkimi postami dodanymi przez userów, a już nie koniecznie zarządzać dodawaniem nowych userów do portalu. Albo można to jeszcze rozwarstwić na trzy różne sposoby. Administratorzy – bieżące sprawy, Administratorzy archiwum, Administratorzy posty i każdy z nich ma jeszcze dodatkowe albo i nie uprawnienia do zarządzania czytelnią. To by było na tyle z funkcjonalności teraz kod.

Czynności do wykonania:

  1. Instalacja laravela z użyciem composera
  2. Instalacja UI
  3. Instalacja botstrap i –auth
  4. Instalacja i Kompilacja NPM – npm install
  5. Konfiguracja Bazy danych w pliku .env 
  6. Dodanie do istniejącej tabeli users potrzebnych pól lub utworzenie nowej migracji do już stworzonej. Są dwa sposoby, jeżeli nie została jeszcze stworzona migracja projektu, tak jak to ma miejsce w naszym przypadku to dopisujemy do już stworzonej migracji dwie kolumny, czyli odszukujemy w database/migrations/crate_users i dopisujemy                          $table->string(’admintype’)->default(’0′);  $table->string(’usertype’)->default(’ghost’);, albo tworzymy nową migrację, która po prostu dołączy odpowiednie pola do istniejącej w bazie danych tabeli po wcześniejszej migracji, jeżeli mamy już projekt wcześniej przygotowany. Oba przypadki pokazane są poniżej w tych samych punktach.
  7. Migracja do bazy danych php artisan migrate
  8. Stworzenie wstępnych danych w bazie danych za pomocą seeders/DatabaseSeeder.php
  9. Stworzenie plików middleware, gdzie później dodamy Trait App/http/Traits/TraitActivGuard.php
  10. Stworzenie Controllera Admin 3szt i User 3szt, można także stworzyć tylko jeden kontroler dla wybranej grupy, ale takie rozwiązanie na trzech uprawnieniach daje bardziej przejrzysty wgląd w kod, który wam chcę przedstawić, kto dostaje uprawnienia i od kogo w ROUTE bardzo ciekawie to wygląda i funkcjonuje.
  11. Wpisujemy ścieżki gdzie ma zostać automatycznie przekierowany dany user dotyczy tylko administratorów, choć można też dla userów wprowadzić, założenia były inne na potrzeby produkcyjne😉 w App\Providers\RouteServiceProvider\ RouteServiceProvider.php
  12. Nowy Trait w przestrzeni nazw App/http/Traits/TraitActivGuard.php Podpinamy metody w Trait, gdzie później użyjemy i wszczepimy dla poszczególnych klas (słowo na czasie „wszczepimy” 😊)
  13. Dodajemy do Modelu users w zmiennej $fillable += 'admintype’, 'usertype’,
  14. Dodajemy do Auth/LoginController + use \App\Http\Traits\TraitActivGuard; I stawiamy nową metodę protected redirectTo(), a do środka wstawiamy routing przekierowujący na odpowiednie miejsca wstrzyknięty 😊 przez Trait $this->roleRedirect();
  15. W AdminRoleMiddleware dodajemy tak samo jak do LoginControllera Trait use \App\Http\Traits\TraitActivGuard;  I do metody handle( dopisujemy , …$guards) wstrzykujemy $this->nextRequestAdmin($request, $next, $guards);
  16. To samo co w punkcie 15 wykonujemy dla UserRoleMiddleware use \App\Http\Traits\TraitActivGuard; dopisujemy do metody handle(dopisujemy , …$guards) wstrzykujemy $this->nextRequestUser($request, $next, $guards);
  17. Następnie pozostaje uzupełnić stworzone kontrolery zaczniemy od Administracji 😉 Admin\AdminController , Admin\SuperAdminController,  Admin\ModeratorAdminController o dane przekazywane dla widoku.
  18. Uzupełnienie danych w Controller User\ GhostControllerUser\ SuperUserController, User\ UserController o dane dla widoku.
  19. Tworzymy widok w views/admin/home.blade.php
  20. Tworzymy widok w views//home.blade.php
  21. Tworzymy widok w view/layouts/admin.blade.php
  22. Do homeController dodajemy status ->with(’status’, 'home’);
  23. Przypisujemy prawa dostępu w Karnel App\Http\Karnel.php
  24. Teraz wisienka 😉 sam Router w routes/web.php

Opis Czynności z przedstawieniem Kodu PHP

  1. composer create-project laravel/laravel AdminIUserRolecomposer,   require laravel/breeze –devphp artisan breeze:install
  2.  composer require laravel/ui ,   php artisan ui bootstrap
  3.  php artisan ui bootstrap –auth
  4.  npm install # for development # npm run dev
  5.  Połączenie Baza Danych  w pliku .env
laravel8-.env
laravel8-.env 

6. Przeprowadzanie migracji na dwa sposoby

migracja-users-laravel8
migracja-users-laravel8

admintype var20, usertype var20

baza-danych-migracja-AddTable-laravel8
baza-danych-migracja-AddTable-laravel8

7. Migrujemy  php artisan migrate

8. W seeder tworzymy userów

seeder-users-laravel8-db
seeder-users-laravel8-db

php artisan db:seed

baza-danych-adminType-i-userType-laravel8
baza-danych-adminType-i-userType-laravel8

9.    Nowe middleware    php artisan make:middleware AdminRoleMiddleware,  php artisan make:middleware UserRoleMiddleware 

10. Nowe kontrolery

Admin

php artisan make:Controller Admin\AdminController, php artisan make:Controller Admin\SuperAdminController, php artisan make:Controller Admin\ModeratorAdminController

User

     php artisan make:Controller User\ GhostController, php artisan make:Controller User\ SuperUserController, php artisan make:Controller User\ UserController  

11. Dodajemy stałe do przekierowań

Route-Serwis-Provider-laravel8
Route-Serwis-Provider-laravel8

12.  Tworzymy folder Trait i w nim plik App/http/Traits/TraitActivGuard.php

Trait-Activ-Guard-laravel8
Trait-Activ-Guard-laravel8
Trait-Activ-Guard-metod-laravel8
Trait-Activ-Guard-metod-laravel8
Trait-Activ-Guard-metod-laravel8.1
Trait-Activ-Guard-metod-laravel8.1
Trait-Activ-Guard-metod-laravel8.2
Trait-Activ-Guard-metod-laravel8.2
Trait-Activ-Guard-metod-laravel8.3
Trait-Activ-Guard-metod-laravel8.3

13.  Model Users

Model-Users-laravel8
Model-Users-laravel8

14. LoginController  dodajemy  Trait wcześniej przygotowany

Login-Controler-Guard-laravel8
Login-Controler-Guard-laravel8

15.   AdminRoleMiddleware dodajemy Trait i metode   ->nextRequestAdmin($request, $next, $guards); a do handle() dodajemy (…$guards) ważne, trzy kropeczki co oznaczają odsyłam do dokumentacji Manual PHP 

Admin-Role-Middleware-laravel8
Admin-Role-Middleware-laravel8

16.  UserRoleMiddleware dodajemy Trait i metode ->nextRequestUser($request, $next, $guards);  jak wyżej do handle() dodajemy (…$guards)

User-Role-Middleware-laravel8
User-Role-Middleware-laravel8

17.  Kontrolery Widoku Administracji

Super-Admin-Controller-laravel8.1
Super-Admin-Controller-laravel8.1
Moderator-Admin-Controller-laravel8
Moderator-Admin-Controller-laravel8
Admin-Controller-laravel8
Admin-Controller-laravel8

18. Uzupełnienie danych dla widoku Controller User

Ghost-Controller-laravel8
Ghost-Controller-laravel8
Super-User-Controller-laravel8
Super-User-Controller-laravel8
User-Controller-laravel8
User-Controller-laravel8

19.  Widok Admin

Admin-Widok-laravel8
Admin-Widok-laravel8

20.  Widok User

User-Widok-laravel8
User-Widok-laravel8

21.  Tworzymy widok w view/layouts/  taki sam jak app.blade.php z tym, że zmieniamy nazwę na admin.blade.php ponieważ rozdzielamy role admin, user. Nie musimy tego robić, możemy wszystkich odsyłać do jednego widoku app.blade, ale co jak przyjdzie stworzyć jakiś konkretny panel administracyjny, który nie będzie miał w sobie tylko samego wylogowania, a konkretne dane i do tego menu administracyjne. Wtedy i tak będziemy zmuszeni na rozdzielenie tych funkcji.

22.  HomeController  dane dla Widok

Home-Controller-laravel8.1
Home-Controller-laravel8.1

23. W Karnel Route  – adminRole & userRole przypisujemy dostęp do Klas umieszczonych w Middleware.

Karnel-Route-laravel8
Karnel-Route-laravel8

24.  Router w routes/web.php          torcik  dla wisienki  🙂

Route-admin-laravel8
Route-admin-laravel8
Route-user-laravel8.1
Route-user-laravel8.1
widok-Admin-laravel8
widok-Admin-laravel8
widok-user-laravel8
widok-user-laravel8

Powodzenia i miłego użytkowania.

https://laravel.com