Skip to content

Переключатель Включён/Отключён в строке пользователя (мгновенный kill-switch) #107

Description

@Postlog

Категория: ux · Приоритет: medium · Размер: M · Ранг: 5/10

Что построить

Switch «Включён» в строке таблицы пользователей и в форме редактирования. Отключение = ре-байнд того же клиента с enable:false (сохраняя uuid/subId), включение — обратно.

Паритет с конкурентами

3x-ui (enable-флаг на клиенте), Marzban/Marzneshin (status disabled), Remnawave/Hiddify (enable toggle). Включение/отключение без удаления — у всех.

Чего не хватает сейчас (код)

fleet/build.go:57 уже читает cs.Enable и пропускает выключенных, но subgen никогда сам не выставляет enable (add_client.go хардкодит enable:true), и в UI нет переключателя. #89 закладывает enabled-флаг — эта фича добавляет к нему UI-переключатель/кнопку в строке как ручной kill-switch и опору для автоотключения по квоте/сроку (#103/#104).

Зачем

Оператор мгновенно приостанавливает неоплатившего/злоупотребляющего пользователя и возвращает после оплаты, не теряя UUID/subId/историю. И ручной kill-switch, и фундамент для энфорсмент-джоб. Subgen сегодня умеет только удалять.

Предлагаемая реализация

Поверх #89: новый метод xui-клиента UpdateClient (POST /panel/api/clients/update/:email с enable) — один файл update_client.go + httptest-тест; provisioning.SetEnabled (re-bind того же uuid с флагом). Ручка user_set_enabled (openapi → ogen), тонкий хендлер (sentinel→4xx). Во Vue — switch в строке/форме. ClientSpec.Enable вместо хардкода.

Затронутые файлы

  • internal/entity/panel.go (ClientSpec.Enable), internal/clients/xui/update_client.go (новый) + тест, contract.go, add_client.go
  • internal/service/provisioning/service.go (SetEnabled), openapi/user_set_enabled.yaml (новый)
  • internal/handlers/user_set_enabled/, internal/handlers/web/static/{app.js,index.html}

Продуктовый ресёрч: изучены аналоги (Marzban/Marzneshin, 3x-ui, Remnawave, Hiddify, sub-store + клиентские стандарты импорта). Паритет и subgen-gap код-обоснованы. Ранг = продуктовый приоритет.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions