Membuat Gate dan Policy


Dalam tutorial ini, kita akan membahas cara membuat Gate dan Policy di Laravel untuk mengelola otorisasi pengguna. Kita akan melalui langkah-langkah yang diperlukan untuk mengimplementasikan fitur ini secara detail.

Apa itu Gate dan Policy?

  • Gate: Adalah cara untuk mengatur izin pada level aplikasi. Biasanya digunakan untuk operasi sederhana yang tidak membutuhkan model.
  • Policy: Adalah kelas yang mengelola izin pada level model. Policy cocok digunakan jika otorisasi terkait dengan tindakan pada model tertentu.

Langkah 1: Membuat Gate

1.1 Definisikan Gate

Anda dapat mendefinisikan gate dalam metode boot pada AuthServiceProvider. Buka file app/Providers/AuthServiceProvider.php dan tambahkan kode berikut:

use Illuminate\Support\Facades\Gate;

public function boot()
{
    $this->registerPolicies();

    Gate::define('view-dashboard', function ($user) {
        return $user->role === 'admin';
    });
}

1.2 Menggunakan Gate dalam Controller

Anda bisa menggunakan gate di kontroler Anda untuk memeriksa izin pengguna:

public function dashboard()
{
    if (Gate::allows('view-dashboard')) {
        return view('dashboard');
    }

    return redirect()->route('home')->with('error', 'Anda tidak memiliki akses ke dashboard.');
}

Langkah 2: Membuat Policy

2.1 Membuat Policy

Untuk membuat policy, Anda dapat menggunakan perintah artisan. Misalkan kita ingin membuat policy untuk model Post:

php artisan make:policy PostPolicy

2.2 Mendefinisikan Metode dalam Policy

Buka file app/Policies/PostPolicy.php dan tambahkan metode yang diperlukan:

public function view(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

public function create(User $user)
{
    return $user->role === 'editor';
}

2.3 Mendaftar Policy

Masih di file AuthServiceProvider, daftarkan policy yang telah Anda buat:

protected $policies = [
    Post::class => PostPolicy::class,
];

2.4 Menggunakan Policy di Controller

Anda bisa menggunakan policy di kontroler dengan cara berikut:

public function show(Post $post)
{
    $this->authorize('view', $post);
    return view('posts.show', compact('post'));
}

public function create()
{
    $this->authorize('create', Post::class);
    return view('posts.create');
}

Kesimpulan

Dalam tutorial ini, kita telah membahas cara membuat Gate dan Policy di Laravel. Anda sekarang dapat mengelola izin pengguna dengan lebih efektif. Anda dapat memperluas tutorial ini dengan membuat lebih banyak metode pada policy dan gate sesuai kebutuhan aplikasi Anda.

Referensi

Untuk informasi lebih lanjut, Anda dapat merujuk ke dokumentasi resmi Laravel tentang authorization.