Správa používateľov a rolí pomocou Laravelu

Správa používateľov a ich rolí je jednou zo základných funkcií, ktoré potrebuje takmer každá webová aplikácia. V tomto článku sa pozrieme na to, ako implementovať robustný systém správy používateľov a rolí pomocou frameworku Laravel. Zameriame sa na vytváranie používateľov, prideľovanie rolí a implementáciu autorizácie na základe týchto rolí.

Nastavenie autentifikácie

Laravel poskytuje jednoduché riešenie pre autentifikáciu pomocou balíka laravel/ui. Nainštalujeme ho a spustíme generovanie potrebných súborov:

composer require laravel/ui
php artisan ui vue --auth
npm install && npm run dev
php artisan migrate

Týmto sme nastavili základnú autentifikáciu s registráciou a prihlasovaním.

Vytvorenie modelov a migrácií pre roly

Vytvorenie modelu Role

Najprv vytvoríme model Role a zodpovedajúcu migráciu:

php artisan make:model Role -m

Otvoríme súbor migrácie v database/migrations a pridáme stĺpec pre názov role:

public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->id();
        $table->string('name')->unique();
        $table->timestamps();
    });
}

Pridanie role_id do používateľov

Potrebujeme pridať stĺpec role_id do tabuľky users. Vytvoríme novú migráciu:

php artisan make:migration add_role_id_to_users_table --table=users

V migrácii pridáme stĺpec:

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->unsignedBigInteger('role_id')->nullable()->after('id');

        $table->foreign('role_id')->references('id')->on('roles')->onDelete('set null');
    });
}

a spustíme migrácie kódikom php artisan migrate

Definovanie vzťahov medzi modelmi

Model User

V modeli User definujeme vzťah k modelu Role:

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use Notifiable;

    public function role()
    {
        return $this->belongsTo(Role::class);
    }
}

Model Role

V modeli Role definujeme vzťah k modelu User:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    public function users()
    {
        return $this->hasMany(User::class);
    }
}

Seeder pre roly

Vytvoríme seeder, ktorý nám naplní tabuľku roles základnými rolami:

php artisan make:seeder RolesTableSeeder

V seederi database/seeders/RolesTableSeeder.php pridáme:

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Role;

class RolesTableSeeder extends Seeder
{
    public function run()
    {
        Role::create(['name' => 'admin']);
        Role::create(['name' => 'user']);
    }
}

Následne spustíme seeder cez php artisan db:seed –class=RolesTableSeeder

Prideľovanie rolí používateľom

V kontroleri RegisterController môžeme nastaviť predvolenú rolu pre nových používateľov:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use App\Models\Role;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

class RegisterController extends Controller
{
    use RegistersUsers;

    protected function create(array $data)
    {
        $user = User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);

        // Pridanie role používateľovi
        $user->role()->associate(Role::where('name', 'user')->first());
        $user->save();

        return $user;
    }
}

Následne môžeme pridať middleware pre kontrolu rolí, aleboďalšie rozšírenia podľa požiadaviek na robustnosť správy rolí.

Fulltextové vyhľadávanie v PHP a MySQL

31.08.2024

Fulltextové vyhľadávanie v MySQL umožňuje efektívne prehľadávanie veľkých textových dát. Základný script ktorý potrebujeme a ktorý si môžete prispôsobiť podľa svojich potrieb, napríklad pridať ďalšie polia na vyhľadávanie alebo upraviť vzhľad výsledkov je tento: Vysvetlenie kódu Konfigurácia databázy a pripojenie: Nastavenie parametrov pripojenia k databáze. [...]

Implementácia živých kasínových hier pomocou WebSocketov v PHP a Laraveli

30.08.2024

Implementácia živých kasínových hier predstavuje moderný a atraktívny spôsob, ako zaujať hráčov a poskytnúť im autentický zážitok z hry. Použitie WebSocketov umožňuje real-time komunikáciu medzi serverom a klientom, čím sa dosahuje plynulé a rýchle reagovanie na herné udalosti. V tomto článku si ukážeme, ako vytvoriť živé kasínové hry pomocou PHP a Laravelu, [...]

Kompletný skript pre odosielanie e-mailov pomocou PHPMailer vrátane konfigurácie SMTP

19.08.2024

Vysvetlenie kódu: Autoloader: Použitím Composeru načítame potrebné triedy z PHPMaileru. SMTP konfigurácia: Nastavíme pripojenie k SMTP serveru vrátane hostiteľa, portu, používateľského mena a hesla. Nastavenie príjemcov: Pridáme odosielateľa, príjemcu a voliteľnú adresu pre odpovede. Nastavenie obsahu e-mailu: Definujeme predmet, telo e-mailu vo formáte HTML a alternatívny [...]

Merkelová, Putin

Merkelová bránila vstupu Ukrajiny do NATO, bála sa ruskej reakcie, píše v knihe. Čo jej povedal Putin počas stretnutia?

21.11.2024 09:32

V popise jedného stretnutia s Putinom potom Merkelová naznačuje, že načasovanie invázie na Ukrajinu súviselo aj s jej odchodom z politiky.

Czech Republic Slovakia

Českí politici sa hádajú pre zvýšenie platov. Bude Petr Fiala zarábať viac peňazí ako Robert Fico?

21.11.2024 09:00

Opozícii prekáža nielen zvýšenie platov politikov. Varuje, že keby Petr Fiala zostal pri moci,Slováci by mohli dostávať vyššie mzdy ako Česi.

Čierny Balog

Okolie Čierneho Balogu sa mení na mesačnú krajinu, lesy sa Horehroncom strácajú pred očami pre mohutnú ťažbu

21.11.2024 08:00

V okolí spustili, kvôli lykožrútovej kalamite, masívnu ťažbu dreva.

Carlo Acutis

Prvý svätec tohto milénia: Pápež kanonizuje mladíka, ktorého označujú za 'patróna internetu'

21.11.2024 07:51

Carlo Acutis, ktorý sa narodil talianskym rodičom v Londýne, bol webový dizajnér.

janvarga

Blog o mojej práci a vášni zároveň. Programujem v PHP a ako najčastejšie cms používam wordpress ako nedokonalú ale modernejšiu náhradu za drupal a typo3. A tom sú moje články.

Štatistiky blogu

Počet článkov: 8
Celková čítanosť: 5975x
Priemerná čítanosť článkov: 747x

Autor blogu

Kategórie

Archív