ifnex/04_Laravel/app/Providers/AppServiceProvider.php
Kazem Alghasi 4a38cf4fce fix(view): place rate-import blade in standard view path
The page view 'filament.pages.rate-import' resolves to namespace 'filament'
+ view 'pages.rate-import' in Laravel (the first dot segment is the
namespace). The previous addNamespace('filament.pages', ...) was wrong
because it registered a new namespace nobody looks up.

Move the blade file to resources/views/filament/pages/rate-import.blade.php
where Laravel's default view paths find it. Revert the AppServiceProvider
hack since it was ineffective.
2026-10-29 16:15:38 +03:30

72 lines
2.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use App\Models\Shipment;
use App\Observers\ShipmentObserver;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*/
public function register(): void
{
//
}
/**
* Bootstrap any application services.
*/
public function boot(): void
{
// هک برای رفع مشکل دیسک اکسل در لاراول ۱۱/۱۲
config(['excel.temporary_files.disk' => 'local']);
// ثبت Observer برای اطلاعیه‌های تغییر سفارش
Shipment::observe(ShipmentObserver::class);
// Explicitly require the IFNEX number helper file so
// ifnex_format_number() / ifnex_persian_digits() / ifnex_trend_percent()
// are available even before `composer dump-autoload` is re-run.
$helperPath = base_path('app/Helpers/number.php');
if (is_file($helperPath)) {
require_once $helperPath;
}
// ─── Rate Limiting برای APIهای حساس ───
RateLimiter::for('auth', function (Request $request) {
// لاگین: ۵ درخواست در دقیقه per IP (جلوگیری از brute-force)
return Limit::perMinute(5)->by($request->ip());
});
RateLimiter::for('sms', function (Request $request) {
// ارسال کد پیامکی: ۱ درخواست در دقیقه per شماره موبایل
return Limit::perMinute(1)->by($request->input('phone') ?: $request->ip());
});
RateLimiter::for('public', function (Request $request) {
// API عمومی (رهگیری، استعلام قیمت): ۳۰ درخواست در دقیقه per IP
return Limit::perMinute(30)->by($request->ip());
});
RateLimiter::for('customer', function (Request $request) {
// API مشتری (لاگین‌شده): ۶۰ درخواست در دقیقه per user
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
RateLimiter::for('wallet', function (Request $request) {
// عملیات مالی حساس (پرداخت، شارژ، freeze): ۳۰ درخواست در دقیقه per user
return Limit::perMinute(30)->by($request->user()?->id ?: $request->ip());
});
RateLimiter::for('staff', function (Request $request) {
// API کارمند: ۶۰ درخواست در دقیقه per user
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
}
}