Проверка подписки в Filament
Давайте проверим подписку. Страница оплаты уже есть у провайдера. Теперь зададим правило: без оплаты команда не работает в /admin/acme, а попадает на billing.
ManualBillingProvider.php
сообщает Filament имя
middleware через
метод getSubscribedMiddleware.
Проверку вынесем
в отдельный класс:
<?php
namespace App\Billing;
use App\Filament\Pages\Billing;
use App\Http\Middleware\EnsureTeamIsSubscribed;
use Filament\Billing\Providers\Contracts\BillingProvider;
class ManualBillingProvider implements BillingProvider
{
public function getRouteAction(): string
{
return Billing::class;
}
public function getSubscribedMiddleware(): string
{
return EnsureTeamIsSubscribed::class;
}
}
?>
Middleware читает
текущую команду
и смотрит метод
subscribed
на модели. Без подписки
идём на billing,
иначе пропускаем дальше:
<?php
namespace App\Http\Middleware;
use Closure;
use Filament\Facades\Filament;
use Illuminate\Http\Request;
class EnsureTeamIsSubscribed
{
public function handle(Request $request, Closure $next)
{
$team = Filament::getTenant();
if ($team && ! $team->subscribed()) {
return redirect()->route(
Filament::getCurrentPanel()->generateRouteName('tenant.billing'),
['tenant' => $team],
);
}
return $next($request);
}
}
?>
В панели включим
requiresTenantSubscription,
чтобы middleware
работал на каждом
запросе команды.
<?php
namespace App\Providers\Filament;
use App\Billing\ManualBillingProvider;
use App\Models\Team;
use Filament\Panel;
use Filament\PanelProvider;
class AdminPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->default()
->id('admin')
->path('admin')
->login()
->tenant(Team::class)
->tenantBillingProvider(new ManualBillingProvider())
->requiresTenantSubscription();
}
}
?>
Проверьте оплату сами и отправляйте неоплаченную команду на страницу оплаты.