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

Apa Itu Xampp

  Pengertian XAMPP XAMPP adalah sebuah paket perangkat lunak (software) komputer yang sistem penamaannya diambil dari akronim kata Apache, MySQL (dulu) / MariaDB (sekarang), PHP, dan Perl. Sementara imbuhan huruf “X” yang terdapat pada awal kata berasal dari istilah  cross platform  sebagai simbol bahwa aplikasi ini bisa dijalankan di empat sistem operasi berbeda, seperti OS Linux, OS Windows, Mac OS, dan juga Solaris. Sejarah mencatat, software XAMPP pertama kali dikembangkan oleh tim proyek bernama Apache Friends dan sampai saat ini sudah masuk dalam rilis versi  7.3.9  yang bisa didapatkan secara gratis dengan label GNU (General Public License). Jika dijabarkan secara gamblang, masing-masing huruf yang ada di dalam nama XAMPP menurut para ahli memiliki arti sebagai berikut ini:   X = Cross Platform Merupakan kode penanda untuk software cross platform atau yang bisa berjalan di banyak sistem operasi. Jadi, ada XAMPP untuk Windows, xampp for mac, dan untuk...