Install Spatie Laravel-permission package
composer require spatie/laravel-permission

Perintah tersebut akan membuat perubahan pada composer.json

Kemudian jalankan perintah di terminal:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
maka akan membuat dua file

dan jalankan migration
php artisan migrate

Selanjtnya membuat CRUD management permission
Membuat model permission
artisan make:model Permission
Maka akan dibuat kan file app/Models/Permission.php
Ubah Permission.php menjadi
<?php
namespace App\Models;
use Spatie\Permission\Models\Permission as OriginalPermission;
class Permission extends OriginalPermission
{
protected $fillable = [
'name',
'guard_name',
'updated_at',
'created_at'
];
}
Membuat Controller
php artisan make:controller Admin/PermissionController --model=Permission --resource

maka dibuatkan file app/Http/Controllers/Admin/PermissionController.php isi file tersebut yaitu:
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Permission;
use Illuminate\Http\Request;
class PermissionController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(Permission $permission)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Permission $permission)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Permission $permission)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Permission $permission)
{
//
}
}
Membuat Routenya:
buat file routes/admin.php
Tuliskan kode berikut di file admin.php
<?php
Route::group([
'namespace' => 'App\Http\Controllers\Admin',
'prefix' => 'admin',
'middleware' => ['auth'],
], function () {
Route::resource('permission', 'PermissionController');
});
Route baru perlu dimasukkan ke dalam fungsi boot() di RouteServiceProvider.php.

maka kode lengkap RouteServiceProvider.php
<?php
namespace App\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
/**
* The path to your application's "home" route.
*
* Typically, users are redirected here after authentication.
*
* @var string
*/
public const HOME = '/dashboard';
/**
* Define your route model bindings, pattern filters, and other route configuration.
*/
public function boot(): void
{
RateLimiter::for ('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
});
}
}
