Limit::perMinute(10)->by($request->ip())->response(function () { return response()->json(['message' => 'Too many login attempts. Please try again later.'], 429); }) ); Route::prefix('v1')->group(function () { // Public Route::post('/auth/login', [AuthController::class, 'login']) ->middleware('throttle:api.login'); Route::get('/app/config', AppConfigController::class) ->name('api.app.config'); // Protected Route::middleware('auth:sanctum')->group(function () { Route::get('/auth/me', [AuthController::class, 'me']); Route::post('/auth/logout', [AuthController::class, 'logout']); Route::apiResource('users', UserController::class)->names([ 'index' => 'api.users.index', 'store' => 'api.users.store', 'show' => 'api.users.show', 'update' => 'api.users.update', 'destroy' => 'api.users.destroy', ]); Route::get('/roles', function () { return response()->json([ 'data' => Role::select('id', 'name', 'guard_name', 'created_at')->get(), ]); })->middleware('permission:role.view')->name('api.roles.index'); Route::get('/permissions', function () { return response()->json([ 'data' => Permission::select('id', 'name', 'guard_name')->get(), ]); })->middleware('permission:role.view')->name('api.permissions.index'); }); });