Enhance admin endpoints and queries for improved filtering and management
- Updated `ListPaymentRequestsQuery` to include `Kind` and `Search` parameters for better filtering of payment requests. - Enhanced `ListAuditLogsQuery` to support additional filters: `Source`, `TargetType`, and `Action`, improving audit log retrieval. - Modified `ListUsersQuery` to accept new filters: `RoleId`, `IsActivated`, `IsBlocked`, and `BillingExpired`, allowing for more granular user management. - Introduced `DeleteInbound` endpoint to allow deletion of inbounds that are not currently available, enhancing inbound management capabilities. - Updated frontend API calls to reflect new query parameters and support for additional filtering options in the admin interface. - Revised API documentation to include new parameters and endpoint functionalities for better clarity and usage guidance.
This commit is contained in:
@@ -88,6 +88,17 @@ AppUser
|
||||
`IsAvailable` сбрасывается обратно в `true`: без этого разово пропавший инбаунд оставался бы
|
||||
недоступным навсегда, даже вернувшись на панель.
|
||||
|
||||
Пока запись висит с `IsAvailable=false`, админ может удалить её вручную
|
||||
(`DELETE /api/admin/inbounds/{id}`, `DeleteInboundCommandHandler`) — это единственный способ
|
||||
вычистить дубли, возникающие, если админ пересоздал инбаунд на самой панели под тем же remark/портом
|
||||
(3x-ui выдаёт новый `RemoteInboundId`, старая запись остаётся мусором навсегда, пока её не удалить
|
||||
руками). Разрешено только для `IsAvailable=false` — на живой инбаунд эта команда не действует
|
||||
(`Inbounds.StillAvailable`). Перед удалением каскадно отзывает (`VpnConfig.Revoke()`) все ещё не
|
||||
`Revoked` конфиги на нём — панельного клиента для них всё равно не существует, поэтому это чисто
|
||||
локальная операция без вызова гейтвея. Уже `Revoked` конфиги при этом остаются в БД с `InboundId`,
|
||||
указывающим на удалённую запись — сознательный компромисс: пользовательские списки конфигов Revoked
|
||||
не показывают вовсе, а админский список подставляет "?" вместо локации отсутствующего инбаунда.
|
||||
|
||||
> `Node.Status` (health-check раз в 2 минуты, см. `NodeHealthCheckService`) — это диагностический
|
||||
> индикатор для админа, не гейт для создания конфига: он кэшированный и может ложно показывать
|
||||
> `Offline` из-за временного сбоя пробника. Реальную недоступность ноды ловит вызов
|
||||
@@ -577,6 +588,13 @@ Singleton (как `PricingSettings`) — реквизиты для оплаты
|
||||
знает про `PaymentRequest` (граница Identity/биллинг), поэтому джойн с `PaymentRequests` сделан в
|
||||
Application-хендлере поверх результата `IIdentityService.ListUsersAsync`, а не внутри Identity.
|
||||
|
||||
`ListUsersAsync` также поддерживает фильтр `billingExpired` (`GET /api/admin/users`) — но не просто
|
||||
`BillingPaidUntil < now`: у пользователя без billing-роли это поле тоже `null`, что не значит
|
||||
"просрочено". Фильтр дополнительно ограничивает выборку пользователями, чья роль имеет
|
||||
`BillingEnabled=true` (джойн `AspNetUserRoles`/`AspNetRoles` внутри `IdentityService`, единственное
|
||||
место в Identity, которое смотрит на `AppRole.BillingEnabled`, — не на `PaymentRequest`, так что
|
||||
граница Identity/биллинг не нарушается).
|
||||
|
||||
Прочие точки, не входящие в `BillingConfigResumer`:
|
||||
- **Создание** (`CreateVpnConfigCommandHandler`) пушит `expiresAt = profile.BillingPaidUntil` при
|
||||
`BillingEnabled` через `AddClientAsync` — свежий конфиг сразу несёт правильный срок.
|
||||
|
||||
Reference in New Issue
Block a user