Spatie adalah salah satu solusi paling mujarab ketika ingin membuat Role Management maupun Permission Management di laravel. Sebenarnya saya sudah lama ingin menggunakannya, namun belum ada projek yang membutuhkan Role Management dalam sistemnya. Baru belakangan, saya menemukan Project yang memerlukan Spatie. Belajarlah saya menggunakannya.
Dalam instalasi spatie di laravel 10, sangat mudah sebenarnya. Tinggal install package-nya pakai Composer.
composer require spatie/laravel-permission
PHPSetelah package ditambahkan menggunakan Composer. Kamu tinggal menghapus tembolok yang sudah dibuat laravel. Kata dokumentasinya sih gini, “Clear your config cache. This package requires access to the permission
config. Generally it’s bad practice to do config-caching in a development environment“
php artisan optimize:clear
# or
php artisan config:clear
PHPSetelahnya, tinggal dilakukan migrasi. Dalam migrasi ini, akan di create beberapa table di basis data agar dapat berjalan.
php artisan migrate
PHPTambahin trait yang dibutuhkan ke model Users. Kalau pakai VSCode, sepertinya ketika masukin ‘use HasRoles’ trait Spatie\Permission\Traits\HasRoles trait langsung ditambahkan di bagian atas kode.
// The User model requires this trait
use HasRoles;
PHPnanti jadinya dalam model Users menjadi seperti ini:
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}
PHPKalau mau nambahin Role baru ataupun Permission baru, kamu bisa tambahin pakai kode dibawah. Nanti akan menambahkan data baru di table Role ataupun Permission, tergantung kamu nambahinnya apa.
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);
PHPKamu juga bisa menambahkan permission ke Role yang sudah ada. Tinggal jalanin pakai kode sederhana kaya gini. Bisa pilih salah satu.
$role->givePermissionTo($permission);
#or
$permission->assignRole($role);
PHPMau Assign Role atau Permission ke User, tinggal cari user-nya, lalu assign deh. Kamu bisa juga ngasih Assign Role lebih dari satu untuk satu user, tinggal pakai Array atau Larik, atau bisa juga langsung dipisah pake koma ( , ) saja.
$user->assignRole('writer');
// You can also assign multiple roles at once
$user->assignRole('writer', 'admin');
// or as an array
$user->assignRole(['writer', 'admin']);
PHPMau ngapus Role? Tinggal di-remove aja role-nya.
$user->removeRole('writer');
PHPAtau mau mengubah semua role sebelumnya pakai role yang baru? Gaperlu hapus satu-satu role-nya, tinggal syncRoles aja.
// All current roles will be removed from the user and replaced by the array given
$user->syncRoles(['writer', 'admin']);
PHPKalau sudah diatur hak akses tiap user-nya, tinggal atur halaman mana saja yang bisa dan tidak bisa diakses oleh user berdasarkan role-nya. Kalau saya, milih yang paling gampang, atur di Route.
Route::group(['middleware' => ['role:super-admin']], function () {
//
});
Route::group(['middleware' => ['permission:publish articles']], function () {
//
});
Route::group(['middleware' => ['role:super-admin','permission:publish articles']], function () {
//
});
Route::group(['middleware' => ['role_or_permission:publish articles']], function () {
//
});
PHPKalau mau banyak Permission ataupun banyak Roles, kamu bisa pakai pipes ( | ). Pipes ini bekerja seperti kondisional ‘OR’
Route::group(['middleware' => ['role:super-admin|writer']], function () {
//
});
Route::group(['middleware' => ['permission:publish articles|edit articles']], function () {
//
});
Route::group(['middleware' => ['role_or_permission:super-admin|edit articles']], function () {
//
});
PHPKalau udah, tinggal atur di berkas blade nya pakai @role dan @endrole
@role('writer')
I am a writer!
@else
I am not a writer...
@endrole
PHP
Tinggalkan Balasan