Pluginify

Masuk Daftar
Home > Blog > Laravel > Penerapan Gate dan Policy Laravel untuk Kontrol Akses

Penerapan Gate dan Policy Laravel untuk Kontrol Akses

Penerapan Gate dan Policy Laravel untuk Kontrol Akses

Gate Policy Laravel merupakan komponen yang berfungsi untuk mengatur otorisasi atau perizinan pengguna pada suatu aksi dalam aplikasi. Melalui Gate dan Policy, developer dapat menentukan siapa yang berhak mengakses fitur atau resource tertentu berdasarkan aturan yang telah didefinisikan. Hal ini merupakan elemen penting dalam menjaga keamanan dan konsistensi data, terutama pada sistem berbasis hak akses dan role.

Selain memberikan aturan akses yang fleksibel, Laravel memisahkan mekanisme autentikasi dan otorisasi dengan jelas. Middleware auth bertugas memastikan pengguna sudah login, sedangkan Gate dan Policy memastikan apakah pengguna yang sudah login memiliki hak untuk melakukan tindakan tertentu. Pemisahan tanggung jawab ini membuat struktur aplikasi menjadi lebih bersih dan mudah dirawat.


Perbedaan Gate dan Policy

Meskipun sering digunakan bersamaan, Gate dan Policy memiliki tujuan yang sedikit berbeda:

KomponenFungsiGateMendefinisikan aturan otorisasi berbasis closurePolicyMendefinisikan aturan otorisasi berbasis class dan metode

Biasanya:

  • Gate cocok untuk otorisasi sederhana.
  • Policy cocok untuk model resource seperti Post, User, Product, dan lainnya.

1. Menggunakan Gate

Gate didefinisikan di AppProvidersAuthServiceProvider.

Contoh definisi Gate:

use IlluminateSupportFacadesGate;

public function boot(): void
{
    Gate::define('is-admin', function ($user) {
        return $user->role === 'admin';
    });
}

Menggunakan Gate pada Controller:

if (Gate::allows('is-admin')) {
    // Aksi untuk admin
} else {
    abort(403);
}

Pada Blade View:

@can('is-admin')
    <a href="/admin">Menu Admin</a>
@endcan

Gate juga menyediakan denies():

if (Gate::denies('is-admin')) {
    abort(403);
}

2. Menggunakan Policy

Policy digunakan untuk mengatur otorisasi berdasarkan model, misalnya Post.

Membuat Policy:

php artisan make:policy PostPolicy --model=Post

Lokasi Policy:

app/Policies/PostPolicy.php

Contoh isi Policy:

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

Registrasi Policy

Di AuthServiceProvider.php:

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

Penggunaan Policy dalam Controller

public function update(Request $request, Post $post)
{
    $this->authorize('update', $post);

    // Lanjutkan proses update...
}

Jika otorisasi gagal, Laravel otomatis mengembalikan error 403.


Penggunaan Policy dalam Blade

@can('update', $post)
    <button>Edit Post</button>
@endcan

Helper Authorization Lainnya

Laravel juga menyediakan metode tambahan:

MetodeFungsiauthorize()Otorisasi di controllercan()Otorisasi sederhanacannot()Otorisasi terbalikcanAny()auth untuk beberapa izinGate::before()Menimpa permission sebelum dicek

Contoh Gate::before()

Gate::before(function ($user, $ability) {
    return $user->role === 'superadmin' ? true : null;
});

Ini artinya role superadmin bebas mengakses semua policy.


Studi Kasus Implementasi Gate & Policy

Misalkan aplikasi blog dengan aturan:

✔ Hanya pemilik post yang dapat mengedit

✔ Hanya admin yang dapat menghapus

Model aturan:

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

public function delete(User $user, Post $post)
{
    return $user->role === 'admin';
}

Dengan struktur seperti ini, aplikasi menjadi sangat fleksibel dalam otorisasi.

Kesimpulan

Gate dan Policy adalah komponen kunci dalam sistem otorisasi Laravel yang menjamin pengguna hanya dapat melakukan tindakan sesuai hak aksesnya. Gate cocok untuk aturan sederhana, sedangkan Policy ideal untuk model berbasis resource. Dengan memisahkan autentikasi dan otorisasi, aplikasi menjadi lebih aman, terstruktur, dan mudah dipelihara.

Baca Juga: Memahami Resource Controller Laravel untuk CRUD Standar

Pluginify
Pluginify