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í.

Tvorba grafov pomocou knižnice Chart. js a PHP

01.08.2025

V tomto článku si ukážeme, ako vytvoriť dynamické grafy pomocou knižnice Chart.js a PHP. Chart.js je jednoduchá knižnica na tvorbu grafov v JavaScripte, ktorá umožňuje vizualizáciu údajov v rôznych formátoch, ako sú stĺpcové grafy, čiarové grafy, koláčové grafy a ďalšie. Síce samozrejmosť ale pre istotu: údaje sú uložené v MySQL databáze 🙂 Vytvoríme HTML [...]

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, [...]

vedci, SAV, venhart

Vedci zo SAV odprezentovali dlhoočakávanú analýzu: mRNA vakcíny sú bezpečné. Varovali pred dezinformáciami

04.09.2025 12:58

Všetky použité metódy preukázali, že množstvo zvyškovej DNA vo všetkých analyzovaných šaržiach bolo pod medzinárodne stanovenou hodnotou.

NRSR parlament

Žltačka sa šíri Slovenskom, udrela aj na parlament. Šaško poslancom odporúča umývať si ruky

04.09.2025 12:16, aktualizované: 13:03

Menej ako týždeň pred prvou schôdzou po letných prázdninách musí Národná rada SR riešiť nepríjemný problém.

korupcia

Iba päť z 21 opatrení a 12 vôbec. Slovensko čelí kritike pre (ne)boj s korupciou

04.09.2025 11:51

Skupina GRECO usúdila, že pokrok je nedostatočný a Slovensku dala deadline.

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: 9
Celková čítanosť: 7826x
Priemerná čítanosť článkov: 870x

Autor blogu

Kategórie