food-market/src/food-market.api/Controllers
nns 921bca076c feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8)
- RequiresAdvancedModeAttribute (TypeFilterAttribute → IAsyncAuthorizationFilter):
  читает Organization.IsAdvancedMode по org_id-claim через AppDbContext,
  кэш 30 с, инвалидация после переключения. SuperAdmin bypass. На отказ
  возвращает 403 ProblemDetails с code=advanced-mode-required.
- Атрибут навешен на контроллеры:
  Sales/DemandsController, Inventory/TransfersController,
  Loyalty/LoyaltyCardsController + LoyaltyProgramsController,
  Promotions/PromotionsController, Reports/AbcReportController,
  Admin/OrgAuditLogController, Telegram/TelegramBindingController,
  Common/UserPresetsController.
- И на отдельные действия:
  Catalog/PriceTypesController POST/PUT/DELETE (GET доступен — товары
  используют retail-прайс),
  Catalog/ProductsController POST /bulk-update.
- SuperAdmin toggle (шаг 2) инвалидирует кэш фильтра после SaveChangesAsync.
- SSO (Auth/ExternalAuthController) гейтится UI, а не атрибутом: endpoint
  инициируется анонимом без org_id в токене.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-10-04 11:38:10 +05:00
..
Admin feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Auth feat(s20): Mapster + SSO scaffold + maintenance automation (7 пунктов) 2026-06-07 21:54:12 +05:00
Catalog feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Common feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Dashboard feat(s10): year-demo seeder + 4 dashboard виджета + week-stats 2026-06-06 01:03:36 +05:00
Inventory feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Loyalty feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Organizations feat(s22): data tooling — export/import + schema docs + anon dump (7 пунктов) 2026-06-07 23:00:54 +05:00
Pos feat(observability): Prometheus метрики /metrics + бизнес-счётчики (P1-17) 2026-05-28 12:20:01 +05:00
Promotions feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Purchases feat(s19): bulk-операции + presets + power-user UX (7 пунктов) 2026-06-07 21:08:48 +05:00
Reports feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Sales feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Search feat(s10-3): глобальная Cmd+K палитра + GET /api/search/global 2026-06-06 01:20:05 +05:00
SuperAdmin feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Telegram feat(s29): [RequiresAdvancedMode] + гейтинг скрытых модулей (шаг 3/8) 2026-10-04 11:38:10 +05:00
Uploads perf(s14): индексы + N+1 fix + bundle -50% + WebP variants + pool + Hangfire timing 2026-06-07 13:21:39 +05:00
AuthForgotPasswordController.cs feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana 2026-06-07 12:30:10 +05:00
AuthorizationController.cs feat(auth): TOTP 2FA для админов через AuthenticatorTokenProvider (P2-4) 2026-05-28 17:57:32 +05:00
AuthSignupController.cs fix(phone): серверная KZ-ФЛК на всех endpoint'ах принимающих phone 2026-05-08 01:05:48 +05:00
FeedbackController.cs feat(s17): onboarding wizard + help kb + feedback + diagnostic + whats-new 2026-06-07 17:04:26 +05:00
MeAccountController.cs feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana 2026-06-07 12:30:10 +05:00
MeSessionsController.cs feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana 2026-06-07 12:30:10 +05:00
TwoFactorController.cs feat(s13): security headers + rate-limits + sensitive-ops audit + session revoke + Grafana 2026-06-07 12:30:10 +05:00
WhatsNewController.cs feat(s17): onboarding wizard + help kb + feedback + diagnostic + whats-new 2026-06-07 17:04:26 +05:00