Spatie Permission merupakan Package Laravel yang berfungsi untuk mengelola hak akses dan peran pengguna, seperti memberi izin membuat, mengedit dan menghapus. Dengan paket ini, tentunya akan lebih mempermudah kita dalam melakukan developement aplikasi yang melibatkan banyak user didalamnya.
Contohnya, dalam aplikasi yang kita buat, kita membuat role atau peran user sebagai administrator, admin dan user. Dimana setiap role kita bagi lagi dengan izin tertentu sesuai perannya. Spatie Laravel Permission memberikan kemudahan dalam hal tersebut.
Cara Install Spatie Laravel Permission
Langsung ke topik utama saja ya. Disini saya akan memberikan panduan suingkat mengenai cara instalasi Spatie Laravel Permission di Laravel 11.
- Buka project Laravel yang mau dipasangi Spatie Laravel Permission menggunakan Visual Studio Code atau VS Code. Buka terminal di VS Code, kemudian ketikkan perintah:
Kemudian tekan Enter, dan tunggu proses instalasinya.composer require spatie/laravel-permission
- Setelah proses instalasi selesai, ketikkan perintah:
Kemudian tekan Enter. Ini akan menghasilkan dua file yaituphp artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
permission.php
yang masuk ke folderconfig
, dan file migration yang masuk ke folderdatabase > migrations
, dengan nama***_create_permission_tables.php
. - Selanjutnya kita perlu memasukkan tabel dari paket Spatie Laravel Permission ke dalam database. caranya, ketik perintah:
Kemudian tekan Enter. Jika berhasil, cara ini akan menambahkan tabel pada database yang dihasilkan dariphp artisan migrate
***_create_permission_tables.php
.
Sampai tahap ini, kita sudah berhasil melakukan instalasi spatie permission pada project laravel. Namun, masih ada beberapa konfigurasi yang harus kita lakukan.
Sebenarnya, semua tata cara yang dibutuhkan dalam Spatie Laravel permission bisa kita pelajari di dokumentasinya. Disana sudah ditulis secara lengkap. Tapi disini saya akan membahas sedikit dari kebiasaan yang saya lakukan dalam konfigurasi Spatie Permission.
Konfigurasi Spatie Laravel Permission
Ini bukan praktik terbaik, namun ini cara yang biasa saya lakukan dan bisa diikuti sebagai referensi.
1. Menambahkan Middleware
Buka bootstrap/app.php
dan tambahkan kode berikut ini:
$middleware->alias([
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,
]);
Simpan kode tersebut didalam ->withMiddleware(function (Middleware $middleware) { // Simpan kode disini ... })
. Sehingga kode lengkapnya menjadi seperti ini: <?php
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'role' => \Spatie\Permission\Middleware\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class,
]);
})
->withExceptions(function (Exceptions $exceptions) {
//
})->create();
2. Mendefinisikan Admin Utama
Admin utama harus memiliki akses ke seluruh aplikasi tanpa terhalang oleh izin peran. Dibagian ini akan kita atur supaya pada user yang memiliki peran sebagai admin utama bisa mengakses semua izin tanpa perlu melakukan pengaturan.
Caranya, buka AppServiceProvider
yang terletak di app/Providers/AppServiceProvider.php
dan paste kode barikut didalam public function boot()
Gate::before(function ($user, $ability) {
return $user->hasRole('administrator') ? true : null;
});
Sehingga, kode lengkapnya menjadi seperti berikut: <?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
Gate::before(function ($user, $ability) {
return $user->hasRole('administrator') ? true : null;
});
}
}
Perhatikan kata administrator, ini bisa disesuaikan dengan nama role admin utama.
3. Mengubah Model User
Selanjutnya, kita harus mengubah model User. Lokasinya ada di app/Models/User.php
. Edit file User.php
menjadi seperti ini:
<?php
namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasFactory, Notifiable, HasRoles;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name',
'email',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
* @var array
*/
protected $hidden = [
'password',
'remember_token',
];
/**
* Get the attributes that should be cast.
*
* @return array
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
];
}
}
Pada kode diatas sudah ditambahkan fungsi HasRoles
yang menghubungkan antara user dengan paket Spatie Permission.
Sampai disini Spatie permission sudah bisa digunakan. Namun masih banyak hal yang perlu kita tambahkan supaya bisa benar-benar berfungsi dengan baik.