Как поделиться разговором и отозвать доступ в Open WebUI

Как показать беседу выбранному пользователю Open WebUI, проверить ссылку до и после отзыва. Чем снимок отличается от текущего контекста и чужих копий.

После урока вы сможете

  • Назначить право чтения конкретному пользователю
  • Различать снимок, текущий контекст и совместные ответы
  • Отозвать одну ссылку, сохранив оригинальный разговор
  • Сопоставить свежее чтение до и после отзыва

Проверяемый результат: При готовых учётных записях A и B по желанию проверяем одну ссылку до и после отзыва; невыполненные шаги отмечаем отдельно.

Допустим, пользователю A нужно показать пользователю B в том же экземпляре Open WebUI подготовленный список для настольной игры, а позже закрыть доступ по этой ссылке. Для этого в меню сохранённого диалога открывают Share → Share Chat, выдают право чтения конкретному человеку и проверяют ссылку из его отдельного профиля. Чтобы отозвать доступ, нажимают delete this link и повторяют проверку новой загрузкой адреса. Сам разговор у владельца при этом сохраняется, но чужие копии, выгрузки, скриншоты и уже открытый на экране текст автоматически не стираются.

Никаких чатов, ссылок, вызовов модели или проверок во втором аккаунте для этого материала не выполнялось. Разбор опирается на исходный код и документацию стабильного релиза v0.12.3 по состоянию на 22 октября 2026 года, а сама практика остаётся добровольной. В вашей установке версия, перевод интерфейса, ролевые права и сетевая доступность могут отличаться.

Выберите беседу, которую можно показать целиком

В нашем примере действуют две уже существующие учётные записи одного и того же сервера Open WebUI: A — владелец беседы, B — выбранный читатель. Языковая модель может помочь A оформить короткий список, но права доступа и видимость ссылки определяет само приложение по действиям владельца.

Для самостоятельной пробы создайте от имени A один новый обычный сохранённый чат без рабочих и персональных сведений. Возьмём три вымышленных условия подготовки стола для настольной игры:

  • на столе нужно оставить место для игрового поля;
  • карточки и фишки положить отдельно;
  • воду поставить на соседний столик.

Если вы решите провести упражнение, передайте эти условия модели вместе со следующим возможным запросом:

Сделай из этих условий короткий список подготовки стола. Не добавляй новых сведений.

Какой именно текст вернёт модель, для проверки доступа значения не имеет: вы будете проверять сам факт чтения и отзыва ссылки, а не качество формулировок.

Перед открытием настроек доступа проверьте всё содержимое разговора. При создании ссылки в режиме снимка сервер сохраняет полную структуру диалога вместе с историей сообщений, а страница просмотра строит видимую цепочку по текущему выбранному ответу (Как сохраняется полный снимок, Как строится видимая цепочка). Из этого кода следует, что альтернативные ветки из снимка не вырезаются, поэтому переключение видимой ветки на экране нельзя считать удалением или скрытием остальных вариантов ответа.

Для читателя, который не владеет беседой, сервер убирает расширенные параметры генерации, списки серверов и идентификаторов инструментов, фильтры, переменные чата и чужие метаданные отдельных сообщений (Какие служебные сведения очищаются). При этом сам текст реплик, имена и идентификаторы авторов остаются (Имена авторов и содержимое беседы). Такая очистка не даёт читателю доступа к аккаунту владельца, но и не обезличивает переписку.

Вложения и цитаты проверяются по отдельным правилам (Что остаётся в тексте снимка, Отдельная проверка доступа к файлу, Когда разрешено чтение связанного файла). Любые фрагменты документов, названия файлов или внутренние детали, уже процитированные в сообщениях, становятся частью текста беседы. Обращение к самому исходному файлу сервер проверяет отдельно: оно требует подтверждённого вошедшего пользователя и для читателя может разрешаться выданными правами на общий чат либо доступом к оригиналу или папке, тогда как внешние и встроенные ссылки на изображения зависят от правил своих источников. Не полагайтесь ни на то, что все вложения автоматически откроются, ни на то, что они гарантированно скрыты. В учебный чат файлы, изображения, внешние ссылки и намеренно созданные ветки не добавляйте; при этом само отсутствие добавленных вами вложений или инструментов не доказывает отключения всех серверных или провайдерских процессов.

Пройдите короткий фильтр готовности перед началом практики:

  • Собственная сохранённая беседа. Чат создан в обычном режиме, сохранён в истории и принадлежит подтверждённому пользователю A. Временный чат (Temporary Chat) не создаёт готовой сохранённой записи для серверного маршрута публикации (Ссылка для сохранённого чата владельца); возвращаться к его сохранению здесь не нужно — устройство временного режима мы разбирали в уроке про экспорт, архив и удаление чатов.
  • Права владельца A. В меню диалога из трёх точек виден пункт Share, а в окне настроек можно выбрать конкретного пользователя B (Когда доступна команда Share, Выбор читателя и режима). В исходном коде v0.12.3 разрешение chat.share по умолчанию включено (True), а права на режимы Public и Open для обычных пользователей по умолчанию выключены (False) (Исходные значения разрешений), но это лишь стартовые значения кода — в вашей установке администратор мог задать другие правила.
  • Чистый профиль проверяющего B. Учётная запись B уже существует на том же экземпляре Open WebUI, имеет подтверждённую роль обычного пользователя (user, не pending) и открыта в отдельном профиле браузера или другом браузере. У B не должно быть прав владельца этого чата, роли администратора, участия в допущенных к чату группах или доступа к родительской папке (Встроенная проверка чтения, Независимые права на оригинал).
  • Достижимость одного адреса. Оба профиля открывают один и тот же базовый адрес (origin) вашей установки по сети (Сетевая доступность сервера).

Если хотя бы одно условие не выполняется — нет готового второго пользователя B, скрыт пункт Share, запрещён выбор конкретного читателя или нет уверенности в отдельном профиле и сети, — остановите практическую часть. Не регистрируйте новые учётные записи, не меняйте настройки администратора или сети и не включайте широкие режимы Public или Open ради урока.

Откройте Share и назначьте конкретного читателя

Создание веб-адреса и выдача права на его чтение — два отдельных действия. Владелец A нажимает на три точки рядом с сохранённым диалогом в боковой панели и выбирает Share (заголовок окна — Share Chat). Пункт меню отображается у администраторов и пользователей с разрешением chat.share, но сервер при создании ссылки дополнительно проверяет, что запрос пришёл от подтверждённого пользователя и что исходный чат принадлежит именно ему — даже администратор не может выпустить ссылку на чужую беседу через этот маршрут (Официальный маршрут Share, Проверка владельца перед созданием ссылки).

Внутри окна Share Chat блок Access Control определяет аудиторию ссылки (Как Private сохраняет именованных читателей, Встроенная проверка чтения, Именованные, групповые и Public-разрешения):

Режим и состав разрешенийКто проходит встроенную проверку чтения Open WebUIВажное условие
Private без выбранных пользователей и группТолько владелец беседы и администратор при включённом ENABLE_ADMIN_CHAT_ACCESSНачальное состояние новой ссылки до выдачи прав
Private с добавленными пользователями или группамиВладелец, условно администратор, а также явно указанные подтверждённые пользователи и участники выбранных групп этого экземпляраВыбор Private убирает только общие маски (*), но не удаляет уже добавленных в список людей и группы
Public (user:*)Любой вошедший подтверждённый пользователь (user или admin) этого же экземпляраНеавторизованный посетитель и аккаунт в статусе pending доступ не получают; в упражнении не включаем
Open (anyone:*)Любой держатель ссылки без встроенного требования входа в Open WebUIТребует достижимого сервера и отсутствия внешних сетевых преград; в упражнении не включаем

Для нашей узкой проверки оставьте видимость Private, убедитесь, что в списке доступа нет лишних людей, групп или общих разрешений, добавьте только пользователя B с правом read и оставьте режим Clone only. Обратите внимание на порядок сохранения (Когда сохранение доступа создаёт ссылку): когда вы меняете список доступа, интерфейс уже создаёт запись ссылки на сервере, если её ещё не было, и сохраняет разрешения. Кнопка Copy Link (или Update and Copy Link, если ссылка уже создана) создаёт либо обновляет снимок беседы и копирует в буфер обмена локальный адрес вида <origin текущего экземпляра>/s/<share UUID>, но само нажатие Copy Link без настройки списка доступа никаких прав пользователю B не назначает (Адрес текущего экземпляра, Создание или обновление при копировании).

Чтобы B действительно открыл скопированный адрес, должны совпасть три условия: тот же экземпляр приложения, сетевая доступность адреса и разрешённая аудитория (Вход в тот же экземпляр, Сеть и внешняя авторизация). Учётная запись на другом независимом сервере Open WebUI не даёт прав на вашем сервере. Если экземпляр A открыт по адресу localhost и вы перешлёте такую ссылку на другое устройство, у B слово localhost укажет на его собственную машину, а не на ваш сервер. Само создание ссылки не открывает локальный сервер в интернет, а при использовании VPN, обратного прокси или внешней авторизации эти барьеры остаются в силе даже для режима Open.

Рядом с локальной кнопкой Copy Link в окне может отображаться отдельная кнопка Share to Open WebUI Community, если в конфигурации включён параметр enable_community_sharing (Отдельная передача в Community, Когда показывается кнопка Community). Это внешнее действие, которое передаёт данные чата и моделей на стороннюю платформу сообщества. Для передачи ссылки внутри своего сервера регистрация в Community не нужна — не нажимайте эту кнопку в упражнении. Учитывайте также, что любой скопированный URL можно переслать дальше. Случайный идентификатор UUID лишь формирует уникальный адрес ссылки, но не назначает аудиторию и не защищает от пересылки, а метатег noindex,nofollow на странице просмотра (Инструкция noindex,nofollow, Пределы открытой ссылки) только просит поисковых роботов не индексировать страницу. Ни UUID, ни этот метатег не работают как контроль доступа и не доказывают отсутствия записей о просмотре в журналах веб-сервера или прокси.

Различайте снимок, текущий контекст и ответы в оригинале

Когда в окне публикации выбран режим по умолчанию Clone only, ссылка /s/<share UUID> открывает зафиксированный снимок (snapshot) беседы на момент создания или последнего обновления (Сохранение и обновление снимка). Если владелец A позже допишет или отредактирует сообщения в своём исходном чате, страница /s/... сама по себе не изменится. Нажатие Update and Copy Link перезаписывает снимок текущим состоянием оригинала, сохраняя прежний идентификатор share UUID и прежний адрес ссылки. Чтобы получить новый UUID, старую запись ссылки нужно сначала удалить (delete this link), а затем создать новую. Кроме того, если чат временно переводили в режим совместных ответов Allow replies, а затем вернули обратно в Clone only, сервер также автоматически обновляет снимок всем накопленным к этому моменту содержимым оригинала (Обновление при возврате в Clone only, Возврат в Clone only в документации).

Однако то, что веб-страница /s/... в режиме Clone only продолжает показывать старый снимок, не означает, что все будущие сообщения исходного чата надёжно скрыты от получателя. Не дописывайте в оригинальную беседу секретные сведения, полагаясь на то, что вы не нажимали Update and Copy Link.

В проверенном коде v0.12.3 есть отдельный серверный путь использования чата как контекста для модели (Текущий чат как контекст модели, Чтение текущего оригинала, Какие разрешения проходят проверку). В части прав доступа этот маршрут пропускает либо владельца беседы, либо администратора при включённом ENABLE_ADMIN_CHAT_ACCESS, либо пользователя с правом чтения папки, либо читателя, получившего право read на общий чат — именное, через группу или в режиме Public (user:*). Ни режима Allow replies, ни права записи в оригинал для этой проверки не требуется, а сервер загружает по ней текущую запись оригинального чата, а не старый снимок ссылки.

Чтобы такое чтение текущего оригинала сработало в проверенном коде, должны одновременно выполниться условия самого запроса (Подтверждённый пользователь, Доступ пользователя к модели, Прикреплённые источники запроса, Условие file_context):

  • обычный запрос к модели отправляет вошедший подтверждённый пользователь;
  • выбранная модель разрешена этому пользователю, и у неё включена обработка файлового контекста (file_context);
  • к запросу как прикреплённый источник передан именно чат с идентификатором оригинальной беседы, а не с share UUID ссылки;
  • в текущем оригинальном чате существуют история сообщений и указатель текущего сообщения (currentId);
  • сервер при успешной штатной обработке собирает в один документ только текущую цепочку реплик от выбранного сообщения по ссылкам на родительские сообщения — без всех альтернативных веток, вложенных файлов и настроек аккаунта, а также без нарезки на фрагменты и векторного поиска на этой ветке чата — и подставляет подготовленный источник в непустой запрос при наличии текста промпта (Только текущая цепочка сообщений, Подготовка источника, Условие включения источника в запрос, Включение содержимого по шаблону).

Само по себе выданное право чтения не прикрепляет беседу к чужим запросам автоматически, не гарантирует, что интерфейс каждого читателя предложит кнопку поиска или прикрепления такого чата, и не доказывает фактическую доставку текста внешнему провайдеру или правила его хранения. Анонимный посетитель не проходит проверку подтверждённого пользователя на маршруте генерации, а открытое разрешение Open (anyone:*) само по себе не учитывается проверкой AccessGrants.has_access. Поэтому даже вошедший пользователь, у которого есть только ссылка Open без именных, групповых, Public, папочных, владельческих или администраторских прав, этот исследованный путь к текущему оригиналу не получает (ограничение относится именно к проверенному маршруту контекста чата, а не к любым сторонним плагинам, внешним выгрузкам или иным маршрутам сервера). Общие правила прикрепления источников мы разбирали в уроке про файлы и прошлые разговоры как контекст; в текущем упражнении прикреплять чат к модели не нужно.

Третья граница — прямая совместная запись в исходный диалог через режим Allow replies (Выбор между снимком и оригиналом, Права на совместные ответы и независимые права, Переход к исходному разговору, Режим совместных ответов). В этом режиме подтверждённый пользователь с именным, групповым или Public доступом при открытии ссылки перенаправляется прямо в живую беседу /c/<ID оригинала> и может отправлять туда сообщения. Пользователь, пришедший только по разрешению Open, даже после входа в аккаунт остаётся на странице снимка. В нашей практике режим Allow replies включать не требуется.

От совместной работы в оригинале отличаются собственные копии читателя — Clone Chat и Fork chat (Вход и право на копирование, Отдельная беседа от выбранной точки, Создание независимой копии, Копирование и ответвление в документации). Обе операции требуют входа в аккаунт и разрешения chat.import (для администраторов сделано исключение) и создают в истории читателя новый независимый диалог. Clone Chat копирует разговор целиком, а Fork chat создаёт ветку от выбранного сообщения; если ответвление делается со страницы снимка /s/..., в новую беседу попадают только сообщения из этого снимка, без более поздних реплик оригинала. Созданная копия принадлежит читателю, поэтому последующий отзыв ссылки владельцем A её не удалит. В упражнении нажимать Clone Chat или Fork chat не нужно.

Проверьте доступ B до отзыва ссылки

Окно настроек владельца A показывает только то, какие права вы намеревались выдать. Чтобы получить исходную точку отсчёта перед отзывом, откройте скопированный адрес /s/<share UUID> свежей загрузкой страницы в отдельном профиле браузера, где выполнен вход под обычной подтверждённой учётной записью B на том же экземпляре Open WebUI. Проверка внутри текущей сессии владельца A не доказывает, что доступ есть у B.

В проверенном коде при выполненных предпосылках B должен увидеть страницу снимка с условиями подготовки стола (Проверка при запросе снимка, Переход после неудачной загрузки). Если запрос не проходит серверную проверку прав (код 401), фронтенд выбирает переход по наличию сохранённых в браузере данных входа (что само по себе не означает подтверждённой сервером сессии): без сохранённого токена отправляет на страницу входа /auth?redirect=..., а при его наличии — на главную страницу /.

Поэтому не ищите на экране буквальную надпись Not Found. Если уже на этом шаге, до отзыва, профиль B вместо текста беседы получает окно входа, возврат на главную страницу или сообщение об отказе, исходная проверка чтения не удалась. В таком случае остановитесь и зафиксируйте результат: без подтверждённого чтения до отзыва любой последующий отказ по этой ссылке не будет доказывать, что сработал именно отзыв доступа.

Начните вести одну короткую карточку наблюдений (оставьте поля для своих фактических данных и не вставляйте в отчёты реальные рабочие URL):

  • Условия среды (версия, тот же адрес экземпляра, отдельный обычный профиль B без прав владельца, администратора, групп и папок): ...
  • Свежее открытие ссылки профилем B до отзыва (показан ли снимок про подготовку стола и какой экран открылся фактически): ...

Удалите одну ссылку и сохраните оригинальный разговор

Если B увидел тестовый снимок, вернитесь в профиль владельца A, откройте меню трёх точек того же тестового чата → Share и в верхней части модального окна нажмите подчеркнутую кнопку delete this link (Удаление одной ссылки, Что удаляет отзыв ссылки, Оригинал сохраняется). Этот серверный маршрут доступен только подтверждённому владельцу исходного диалога. Он выполняет три действия: удаляет запись сохранённого снимка, очищает привязку общей ссылки (share_id) у оригинального чата и снимает все выданные через shared_chat разрешения для этой беседы. Сам оригинальный разговор A остаётся на месте.

Для справки: в интерфейсе есть и централизованный раздел Settings → Data Controls → Shared Chats → Manage, где можно нажать значок Unshare напротив одной конкретной беседы (Раздел управления ссылками, Один отзыв и массовый отзыв). Там же находится кнопка Unshare All (Unshare All Shared Chats), но она отзывает все активные локальные ссылки вашего аккаунта — в нашей точечной практике её не используйте.

Отзыв ссылки важно не путать с другими операциями над историей чатов, которые мы рассматривали в уроке про экспорт, архив и удаление чатов:

  • Архивирование чата не отзывает ссылку. Перевод диалога в архив служит для организации истории (меняет признак archived, отвязывает чат от папки и обновляет служебное состояние), но не удаляет запись общей ссылки и выданные по ней права (Изменения при архивировании, Архивирование без отзыва ссылки).
  • Удаление оригинального чата лишнее для этой задачи. Полное удаление исходной беседы попутно удаляет связанные снимки общих ссылок (Удаление оригинала и связанного снимка), но лишает самого владельца A его разговора.

У кнопки delete this link есть точный предел действия. Поскольку запись снимка и разрешения shared_chat удалены, перестаёт открываться ссылка /s/<share UUID>, закрывается основанный на этой ссылке вход в живой оригинал через Allow replies (Отдельные права на оригинальный разговор) и прекращается основанный на разрешении shared_chat доступ к текущему оригиналу как контексту модели (Проверка чтения текущего оригинала как контекста). Однако это действие не затрагивает:

  • независимые права доступа к оригиналу или контексту (например, если бы читатель был владельцем, администратором с ENABLE_ADMIN_CHAT_ACCESS или имел доступ через общую папку);
  • уже созданные читателем копии Clone Chat и Fork chat (Независимая копия читателя), скачанные экспорты, скриншоты, скопированный текст и внешние публикации в Open WebUI Community;
  • текст, который уже отрисован в открытой вкладке браузера B, и ответы на уже отправленные ранее запросы к моделям;
  • внешние API моделей, поисковые сервисы, серверы инструментов, объектные хранилища, серверные журналы и резервные копии (Внешние подключения и хранение). Локальный отзыв ссылки не управляет сроками хранения данных у внешних провайдеров.

Заново откройте старый URL и запишите результат

Чтобы убедиться, что отзыв ссылки подействовал на новые обращения, недостаточно смотреть на уже открытую вкладку в браузере B — в ней старый текст может оставаться на экране без сетевого запроса.

Сначала в профиле A проверьте, что исходная беседа про подготовку стола осталась в вашей истории чатов (устройство история, поиск и папки мы разбирали в отдельном уроке). Затем перейдите в профиль B и заново загрузите прежний адрес /s/<share UUID> в новой вкладке или полной перезагрузкой страницы.

При выполненном отзыве и чистом профиле B новый запрос к старому URL больше не возвращает снимок разговора (Проверка старого адреса после отзыва, Переход при ошибке новой загрузки). В зависимости от состояния сессии и настроек прокси профиль B увидит возврат на главную страницу /, переход на страницу входа /auth?redirect=... или экран отказа — не ждите здесь одного обязательного текста ошибки.

Продолжите начатую карточку наблюдений и допишите в неё результаты после отзыва:

  • Действие отзыва в профиле A (нажата ли кнопка delete this link у одной тестовой беседы): ...
  • Сохранность оригинала у A после отзыва (остался ли тестовый чат в списке диалогов A): ...
  • Новая загрузка старого URL в профиле B после отзыва (возвращается ли текст беседы и какой экран показан фактически): ...
  • Пропущенные шаги и непроверенные условия: ...

Оценивайте запись строго по паре состояний «до и после». Если до отзыва чтение снимка профилем B не было подтверждено, отказ после удаления ссылки не доказывает изменения доступа. Если же при действительно новой загрузке старого адреса текст беседы всё равно вернулся, не объявляйте проверку успешной и не переключайте режимы наугад: запишите этот факт и проверьте, не остался ли вызов в сессии A, действительно ли выполнилось удаление ссылки и нет ли у B независимых прав администратора или доступа через папку. Даже успешный тест подтверждает только закрытие новых обращений по этой локальной ссылке и не доказывает отсутствия сохранённых копий, логов или внешних записей.

Кнопка delete this link закрывает будущие обращения по выбранной локальной ссылке и снимает выданные через неё разрешения на чтение снимка /s/..., использование текущего оригинала как контекста модели и совместные ответы, сохраняя исходный диалог у владельца, но не стирает уже сделанные копии и не отменяет независимые права доступа. Если все предпосылки в вашей установке выполнены, заполните карточку наблюдений по одной этой проверке; если какого-то условия не хватает, отметьте его в последнем пункте и оставьте практику невыполненной.

Материалы урока

Отметить прохождение

Отметьте урок после того, как получили проверяемый результат из практической части.