Files
usher-manage-stack/app/Providers/RouteServiceProvider.php
2025-11-20 23:21:05 +08:00

56 lines
1.7 KiB
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());
});
// Rate limiter for document downloads
RateLimiter::for('document-downloads', function (Request $request) {
// Get rate limits from system settings
$settings = app(\App\Services\SettingsService::class);
$maxAttempts = $request->user()
? $settings->getDownloadRateLimit(true)
: $settings->getDownloadRateLimit(false);
return Limit::perHour($maxAttempts)
->by($request->user()?->id ?: $request->ip())
->response(function () {
return response('下載次數已達上限,請稍後再試。', 429);
});
});
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
}
}