Langsung ke konten utama

Belajar Laravel Roles & Permission

 Kali ini kita akan belajar login roles permission menggunakan pake spatie


Instal Laravel Roles & Permission

Karena kita menggunakan package, maka kita harus menginstal terlebih dulu. Ohya, saya asumsikan kawan-kawan sudah punya proyek Laravel yang masih baru & sudah melakukan konfigurasi untuk database dan sudah menjalankan auth scaffolding Laravel.

composer require spatie/laravel-permission

Setelah terinstal, langkah berikutnya adalah kita menerbitkan file migrations dari package ini.

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"

Berikutnya, jalankan migrationnya.

php artisan migrate

Setelah dijalankan maka akan ada beberapa tabel yang dibuat oleh migration dari package ini.

Penggunaan

Pertama setelah melakukan proses instalasi. Untuk menggunakan package Laravel Permission ini kita tambahkan dulu trait HasRoles ke model User.

use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;

    // ...
}

Dalam tulisan ini, saya akan langsung berikan contoh praktikal yang biasa saya lakukan ketika membangun sebuah proyek yang membutuhkan pembagian level user.

Pertama, yang saya lakukan adalah membuat sebuah seeder untuk mendefinisikan roles apa saja yang tersedia dalam proyek nantinya.

php artisan make:seeder RoleSeeder

Setelah RoleSeeder dibuat, selanjutnya buat kode seperti ini untuk mendefinisikan role yang kawan-kawan butuhkan. Pada contoh ini saya akan buat dua role yaitu admin dan user.

<?php

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;

class RoleSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Role::create([
            'name' => 'admin',
            'guard_name' => 'web'
        ]);

        Role::create([
            'name' => 'user',
            'guard_name' => 'web'
        ]);
    }
}

Setelah membuat seeder untuk role, berikutnya kita akan buat 2 user dengan masing-masing role yang ada. Buat seeder untuk user.

php artisan make:seeder UserSeeder

Kemudian, tambahkan tulis kode ke dalam UserSeeder seperti yang di bawah ini. Fungsinya untuk membuat user dan memberi sebuah role.

<?php

use App\User;
use Illuminate\Database\Seeder;

class UserSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $admin = User::create([
            'name' => 'Admin',
            'email' => 'admin@kawankoding.id',
            'password' => bcrypt('12345678'),
        ]);

        $admin->assignRole('admin');

        $user = User::create([
            'name' => 'User',
            'email' => 'user@kawankoding.id',
            'password' => bcrypt('12345678'),
        ]);

        $user->assignRole('user');
    }
}

Setelah itu, untuk mempermudah proses seeding, panggil seeder yang dibuat tadi ke dalam class DatabaseSeeder.

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(RoleSeeder::class);
        $this->call(UserSeeder::class);
    }
}

Perlu diperhatikan dalam memanggil seeder dahulukan RoleSeeder, karena pada UserSeeder ada proses assignRole yang membutuhkan nilai dari data pada tabel roles.

Kemudian, mari jalankan seedernya.

php artisan db:seed
Seeder Roles & User
RoleSeeder & UserSeeder

Setelah seeder dijalankan maka akan ada 3 tabel yang terisi data. Yaitu tabel rolesusers dan model_has_roles.

Belajar Laravel Roles & Permission
Tabel roles
Belajar Laravel Roles & Permission
Tabel users
Tabel model_has_roles

Sedikit penjelasan tentang tabel model_has_roles adalah model pivot untuk relasi Many to Many Polymorphic di Laravel. Intinya roles bisa digunakan dengan relasi ke model lainnya selain model User. misal kawan-kawan punya model Admin kita bisa juga gunakan trait HasRoles di model Admin.

Membedakan Redirect Ketika Login

Setelah punya data user yang memiliki role. Kebutuhan selanjutnya adalah memisahkan redirect user yang berhasil login sesuai role masing-masing.

Baiklah, mari kita buat route yang akan kita gunakan untuk redirect user berdasarkan role yang dimiliki. Sebelumnya, kita daftarkan dulu middleware dari spatie/laravel-permission untuk melindungi route berdasarkan role.

Tambahkan middleware ke dalam file app/Http/Kernel.php.

protected $routeMiddleware = [
    // ...
    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
    'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];

Kemudian mari kita buat route di file routes/web.php.

Route::get('admin-page', function() {
    return 'Halaman untuk Admin';
})->middleware('role:admin')->name('admin.page');

Route::get('user-page', function() {
    return 'Halaman untuk User';
})->middleware('role:user')->name('user.page');

Oke, sekarang waktunya kita beraksi, ada beberapa cara untuk melakukan pengecekan dan membedakan redirect dari user. Kita gunakan cara paling mudah dan yang biasa saya gunakan. Buka file app/Http/Controllers/Auth/LoginController.php. Kemudian kita akan override method authenticated yang ada di berada trait AuthenticatesUsers. Oke, jadi tambahkan kode ini di LoginController.

public function authenticated(Request $request, $user)
{
    if ($user->hasRole('admin')) {
        return redirect()->route('admin.page');
    }

    return redirect()->route('user.page');
}

Dan jangan lupa untuk menambahkan use Illuminate\Http\Request; biar gak error :P.

Sudah selesai ? sekarang coba akses halaman login (http://localhost:8000/login) dan gunakan masing-masing data user untuk login.

sebelumnya konten ini hanya copas dari web ini : Belajar Laravel Roles & Permission : membedakan level user (kawankoding.id)

Terima Kasih.

Komentar

Postingan populer dari blog ini

Model, View & Controller (MVC)

Model View Controller (MVC) Apa itu MVC?  MVC atau  Model View Controller  adalah sebuah pola desain arsitektur dalam sistem pengembangan website yang terdiri dari tiga bagian, yaitu:  Model,  bagian yang mengelola dan berhubungan langsung dengan database; View , bagian yang akan menyajikan tampilan informasi kepada pengguna; Controller , bagian yang menghubungkan model dan view dalam setiap proses request dari user.  Alur Kerja MVC Oke, setelah mempelajari apa itu MVC, sekarang saatnya memahami bagaimana alur kerja dari MVC. Mari lihat bagan berikut ini: Bagian  view  akan merequest informasi untuk bisa ditampilkan kepada pengguna. Request tersebut kemudian diambil oleh  controller  dan diserahkan bagian  model  untuk diproses;  Model akan mengolah dan mencari data informasi tersebut di dalam database; Model memberikan kembali pada controller untuk ditampilkan hasilnya di view;  Controller mengambil hasil olahan yang...

Rekomendari ekstensi vs code

  GitLens Pada GitLens kita bisa preview commitan sebelum di push, dan bisa melihat perubahan pada baris kode ( dibikin oleh siapa, diubah oleh siapa ), Serta masih banyak fitur lain dari GitLens ini. Visual Studio IntelliCode Sebenarnya auto suggest bawaan dari VS Code itu sendiri sudah lumayan bagus, saya menggunakan ini agar auto suggest bisa lebih detail suggestion yang diberikan, bisa diibaratkan Improve dalam hal suggestion ( Intellisense nya ). Sublime Text Keymap and Settings Importer Bagi teman-teman yang migrasi dari Sublime Text 3 ke Visual Studio Code dan merasa aneh dengan keymap di VS Code, bisa nih dicoba in keymap sublime text di VS Code. Secara keseluruhan keymap nya sama persis dengan keymap sublime text. File Utils Bagi teman-teman yang sering menggunakan VS Code tapi terbatas pada klik kanan di tampilan side folder project nya, yang hanya bisa copy dan paste. Nah pada ekstensi ini ada beberapa penambahan seperti Duplicate, Move, dan masih banyak lagi. Prettier E...