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

rokovanie vlády, Kamil Šaško

Padne dohoda s lekármi? Na rade je Šaško. Odborníci: Dal si herkulovské úlohy, Ficova vláda má antireformnú DNA

21.11.2024 07:30

Odborníci si myslia, že vláda nakoniec ustúpi. Viaceré body memoranda sú však podľa nich nesplniteľné a potrebujú aktualizáciu.

Bernie Sanders

Americký Senát zablokoval návrh na zastavenie transferu zbraní pre Izrael

21.11.2024 06:55

Reuters spresnil, že všetky hlasy na podporu rezolúcie pochádzali z radov demokratov.

Russia Leningrad Siege

Čas vrahov v službách štátu: Ruskí 'hrdinovia' zaplavujú ulice násilím

21.11.2024 06:30

Ľudia, ktorí spáchali ohavné zločiny - vrahovia, násilníci, kanibalovia a pedofili - nielenže sa vyhýbajú trestu, ale sú oslavovaní ako hrdinovia.

vojna na Ukrajine, Kyjev

ONLINE: Sullivan: Nie je to len o zbraniach, Ukrajina potrebuje viac vojakov. Zalužnyj: Naučte sa nebáť smrti

21.11.2024 06:30, aktualizované: 07:22

Dodali sme Abramsy, F-16, Patrioty, ale nie je priama úmera medzi zbraňami a výsledkami. Ukrajina potrebuje viac ľudí na fronte, povedal Sullivan, Bidenov poradca.

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ť: 5963x
Priemerná čítanosť článkov: 745x

Autor blogu

Kategórie

Archív