Gates hanyalah penutupan yang menentukan apakah pengguna diizinkan untuk melakukan tindakan tertentu. Sederhananya Gates adalah sebuah Facade Class yang disediakan Laravel untuk melakukan sebuah Otorisasi. Laravel Gates
Buatlah sebuah Provider Class, In case Saya menamainya AuthorizationServiceProvider.
php artisan make:provider NamaFileClassServiceProviderBerikut adalah penampakannya sebelum terjadi modifikasi.
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class AuthorizationServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register(): void
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot(): void
{
//
}
}Lakukan Perubahan Terhadap Fungsi "Boot"
/**
* Bootstrap services.
*
* @return void
*/
public function boot(): void
{
collect(['admin', 'manager', 'user'])->each(function ($role) {
Gate::define($role, function (User $user) use ($role) {
return $user->roles == $role;
});
});
}Sebagai Contoh Menggunakan Class Model Users dan Wajib Menggunakan Facade Class Gate
use App\Models\User;
use Illuminate\Support\Facades\Gate;Setelah membuat definisi Gates/Gerbang untuk setiap Roles/Peran, Kita Dapat Menggunakan Alias daripada Middleware bawaan Laravel yaitu Autorize::class, Sebagai Contoh Saya Menggunakannya di routes/web.php
Route::group(['prefix' => '/dashboard', 'as' => 'dashboard.', 'middleware' => ['auth']], function () {
Route::get('/welcome', [DashboardController::class, 'displayWelcomingPage'])->name('welcome');
Route::get('/user-data', [DashboardController::class, 'displayUserDataPage'])->middleware('can:admin')->name('user-data');
Route::get('/user-roles', [DashboardController::class, 'displayUserGroupByRolesPage'])->middleware('can:manager')->name('user-roles');
Route::get('/count-user-roles', [DashboardController::class, 'displayCountUserRolesPage'])->middleware('can:user')->name('count-user-roles');
});