Метод `clear` класу RateLimiter у Laravel дозволяє динамічно скинути обмеження швидкості, коли виконуються певні умови, що надає гнучкий контроль над поведінкою обмеження в ваших додатках
Скинути обмеження швидкості програмно:
use Illuminate\Support\Facades\RateLimiter;
RateLimiter::clear('api-calls:' . $userId);
Ось практичний приклад для системи завантаження файлів:
class FileUploadController extends Controller
{
public function upload(Request $request)
{
$key = 'file-upload:' . auth()->id();
$limiter = RateLimiter::attempt(
$key,
$perHour = 10,
function() use ($request) {
return FileUpload::create([
'user_id' => auth()->id(),
'filename' => $request->file('document')->store('uploads'),
'size' => $request->file('document')->getSize()
]);
}
);
if (!$limiter) {
return response()->json([
'error' => 'Обмеження на завантаження перевищено. Будь ласка, почекайте.'
], 429);
}
return response()->json(['status' => 'Файл успішно завантажено']);
}
public function approveUpload(FileUpload $upload)
{
$this->authorize('approve', $upload);
$upload->update(['status' => 'approved']);
RateLimiter::clear('file-upload:' . $upload->user_id);
return response()->json([
'status' => 'Завантаження схвалено',
'quota_reset' => true
]);
}
public function resetUserQuotas(User $user)
{
RateLimiter::clear('file-upload:' . $user->id);
RateLimiter::clear('bulk-download:' . $user->id);
RateLimiter::clear('share-link:' . $user->id);
return back()->with('success', 'Квоти завантаження скинуто');
}
}
Метод `clear` надає можливість програмно скинути обмеження швидкості за умови виконання певних критеріїв, що робить вашу систему обмежень більш динамічною та зручною для користувачів