Some checks are pending
CI / POS (WPF, Windows) (push) Waiting to run
CI / Backend (.NET 8) (push) Successful in 46s
CI / Web (React + Vite) (push) Successful in 41s
Docker API / Build + push API (push) Successful in 1m12s
Docker Web / Build + push Web (push) Successful in 31s
Docker API / Deploy API on stage (push) Successful in 17s
Docker Web / Deploy Web on stage (push) Successful in 12s
Аудит 2026-04-27. Полный отчёт — docs/audit-2026-04-27.md. Что закрыто: — /connect/token (AuthorizationController) теперь отказывает в login если AppUser привязан к удалённой/архивной Organization. SuperAdmin обходит проверку (ему org не нужна). Жалоба: nurnetps@gmail.com мог логиниться после удаления своей org из SuperAdmin консоли. — SuperAdminOrganizationsController.Delete (DELETE org) каскадно деактивирует всех AppUser привязанных к этой org (IsActive=false, OrganizationId=null) и помечает Status='revoked' для всех их OpenIddictTokens. Раньше Org удалялась, а юзеры оставались валидными с активными refresh-tokens на 30 дней. — EmployeesController.Delete теперь soft-delete (IsActive=false, FiredAt). Запрещены: 403 если попытка удалить себя; 403 если попытка удалить Owner (Organization.AccountOwnerUserId == employee.UserId). Сообщения с инструкцией («передайте права», «покинуть через настройки»). — /api/me возвращает hasLiveOrg и hasActiveEmployee — frontend использует это для редиректа на /no-organization вместо белого экрана. — Новая страница /no-organization (NoOrganizationPage) — fallback для orphan AppUser. CTA: создать новую org через публичный /signup или попросить инвайт. Кнопка «выйти». TenantRouteGuard редиректит orphan юзеров туда. — SuperAdminAsOrgBanner: добавлена проверка через useMe — баннер рендерится только если у текущего юзера есть Identity-роль SuperAdmin. Lingering localStorage override от прошлой сессии (другой юзер логинился до этого) автоматически чистится. — auth.ts: clearTokens() теперь сбрасывает superAdminAsOrg и superAdminEditMode. login() вызывает clearTokens() ПЕРЕД запросом чтобы новый юзер не унаследовал override-состояние от предыдущего. — deploy/recovery-restore-orphan-owners.sql — идемпотентный скрипт деактивирующий уже накопленных orphan AppUser (как nurnetps) и revoke их токены. Применён на стейдже: 1 user деактивирован, 9 токенов revoked. — deploy/Dockerfile.api: убран `--no-restore` из publish — два раздельных шага роняли build с NETSDK1064 на свежих analyzer- зависимостях, теперь restore идёт внутри publish. Smoke (стейдж): - nurnetps@gmail.com /connect/token → invalid_grant. - admin@food-market.local /connect/token → access_token выдан. - food-market.zat.kz/, /signup/, app.../login, /health → 200.
39 lines
1.7 KiB
Docker
39 lines
1.7 KiB
Docker
ARG LOCAL_REGISTRY=127.0.0.1:5001
|
||
FROM ${LOCAL_REGISTRY}/mirror/dotnet-sdk:8.0 AS build
|
||
WORKDIR /src
|
||
|
||
COPY food-market.sln global.json Directory.Build.props Directory.Packages.props ./
|
||
COPY src/food-market.domain/food-market.domain.csproj src/food-market.domain/
|
||
COPY src/food-market.shared/food-market.shared.csproj src/food-market.shared/
|
||
COPY src/food-market.application/food-market.application.csproj src/food-market.application/
|
||
COPY src/food-market.infrastructure/food-market.infrastructure.csproj src/food-market.infrastructure/
|
||
COPY src/food-market.api/food-market.api.csproj src/food-market.api/
|
||
COPY src/food-market.pos.core/food-market.pos.core.csproj src/food-market.pos.core/
|
||
COPY src/food-market.pos/food-market.pos.csproj src/food-market.pos/
|
||
|
||
COPY src/ src/
|
||
# Single-step restore + publish — раздельные шаги в multi-stage cache
|
||
# роняли publish с NETSDK1064 (Microsoft.CodeAnalysis.Analyzers 3.3.3 not
|
||
# found) когда в csproj добавлялись новые transitive analyzer-зависимости,
|
||
# а первый restore не покрывал их. Теперь restore выполняется внутри publish.
|
||
RUN dotnet publish src/food-market.api/food-market.api.csproj -c Release -o /app
|
||
|
||
FROM ${LOCAL_REGISTRY}/mirror/dotnet-aspnet:8.0 AS runtime
|
||
WORKDIR /app
|
||
|
||
RUN apt-get update && apt-get install -y --no-install-recommends curl \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
COPY --from=build /app .
|
||
|
||
ENV ASPNETCORE_URLS=http://+:8080
|
||
ENV ASPNETCORE_ENVIRONMENT=Production
|
||
ENV DOTNET_NOLOGO=1
|
||
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||
|
||
EXPOSE 8080
|
||
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s \
|
||
CMD curl -fsS http://localhost:8080/health || exit 1
|
||
|
||
ENTRYPOINT ["dotnet", "foodmarket.Api.dll"]
|