Files
portal/app/app/Http/Middleware/EnsureSalesUser.php
T
Дмитрий 372668ad41 feat(sales): EnsureSalesUser + ScopesSalesOwnership
Task 0.4: middleware EnsureSalesUser (гейт зоны /api/sales — user('sales') активен, иначе 401, alias 'sales-portal'). Трейт ScopesSalesOwnership: менеджер видит только свои tenant_id из sales_client_assignments, начальник (head) — всех (null=без ограничения). Тест SalesOwnershipScopeTest 6/6, всего sales 18/18. Larastan чистый. Один эскейп на сессию.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 12:43:31 +03:00

35 lines
984 B
PHP

<?php
declare(strict_types=1);
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Гейт для зоны /api/sales/*.
*
* Проверяет, что входящий запрос аутентифицирован через guard «sales»
* (Sanctum, провайдер sales_users) и что аккаунт активен (is_active=true).
*
* Применяется через псевдоним 'sales-portal', зарегистрированный в
* bootstrap/app.php.
*
* Spec: docs/superpowers/plans/2026-06-30-sales-portal.md (Task 0.4)
*/
class EnsureSalesUser
{
public function handle(Request $request, Closure $next): Response
{
$user = $request->user('sales');
if ($user === null || ! $user->is_active) {
abort(401, 'Требуется вход в портал отдела продаж.');
}
return $next($request);
}
}