Založ si blog

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

Róbert Fico / Zuzana Dolinková /

Dolinková kritizuje konsolidáciu v zdravotníctve, hovorí o politikárčení. Opozícia varuje pred kolapsom

19.09.2024 18:24

Konsolidácia verejných financií má podľa opozície i komory sestier zobrať zdravotníctvu stovky miliónov eur.

Fluffy

Thajčanku v dome napadol masívny pytón: Zo smrteľného zovretia sa dostala po dvoch hodinách

19.09.2024 17:39

Vo chvíľach, keď pripravovala večeru vo svojom dome, pocítila ostrú bolesť v stehne a keď sa pozrela dolu, zbadala, ako sa jej zmocňuje veľký had.

Izrael, Palestína, rukojemníci, Hamas, izraelskí civilisti

Izrael predložil nový rámec pre dohodu o rukojemníkoch a prímerí v Pásme Gazy

19.09.2024 17:18

Podľa navrhovaného plánu by malo dôjsť aj k prepusteniu palestínskych väzňov uväznených v Izraeli či demilitarizácii Pásma Gazy.

Libanon, Hizballáh, Hassan Nasralláh,

Výbuchy pagerov sú pre nás tvrdou ranou, je to vyhlásenie vojny, vyhlásil šéf Hizballáhu

19.09.2024 17:15

Podľa Nasralláha zvýšil Hizballáh svoju bojovú pohotovosť.

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

Autor blogu

Kategórie

Archív