Перейти к содержимому
Tez Base

Обработка на Инфостарте

Права спросившего для запроса нейросети

Коннектор нейросети ходит в базу 1С под одной учёткой, и модель отвечает сотруднику по данным, которые ему закрыты. Расширение отправляет запрос модели в сеанс самого сотрудника, где платформа применяет его роли и ограничения на уровне записей, и показывает разницу строк между двумя вариантами.

Расширение на Инфостарте бесплатно, код открыт. Файл .cfe для платформы 8.3.27 и выше, проверено на Управлении торговлей 11.5.22. Базу не меняет, кроме своего демо-справочника.

Типовая настройка MCP-коннектора или чат-бота: адрес публикации базы и служебный пользователь с полными правами. Роли и RLS платформа применяет к этому пользователю, поэтому бухгалтер, кладовщик и директор получают через чат одно и то же. Инструкция модели "не показывай лишнего" ничего не ограничивает.

Внутри 1С сменить пользователя у открытого сеанса нельзя. Расширение идёт коротким путём: запрос с данными уходит HTTP-вызовом в свою же публикацию с логином спросившего, веб-сервер открывает сеанс под ним, и права проверяет сама платформа. Служебные вызовы коннектора (метаданные, справка) остаются под его учёткой.

На демо-базе УТ 11.5 один и тот же запрос вернул 6 строк под служебной учёткой и 4 строки в сеансе бухгалтера. Две лишние строки - начисления директора и главного бухгалтера.

Что внутри расширения

HTTP-сервис запроса

POST с текстом запроса в теле. В ответе JSON: число строк, сами строки, имя пользователя сеанса и признак привилегированного режима, чтобы по журналу было видно, где прошёл запрос.

РАЗРЕШЕННЫЕ на стороне базы

Параметр razreshennye=1 дописывает слово после первого ВЫБРАТЬ. Без него запрос, задевший закрытую строку, падает ошибкой прав, с ним закрытые строки отбрасываются.

Вызов от имени спросившего

Функция ВыполнитьОтИмениСпросившего для своего коннектора: адрес публикации, логин и пароль, https по желанию. Возвращает ту же структуру, что и сервис.

Сравнение двух каналов

Функция Сравнить выполняет запрос под служебной учёткой и в сеансе спросившего и возвращает строки, которые пользователь получил бы только через служебную.

Проверки пяти приёмов, которые не работают

Выключение привилегированного режима, РАЗРЕШЕННЫЕ под служебной учёткой, ПравоДоступа за пользователя, фоновое задание, учётка пользователя в коннекторе. Каждый можно прогнать у себя.

Демо одной строкой

Справочник на 6 строк с флажком "Конфиденциально", роль бухгалтера с условием на уровне записей, роль служебной учётки. ДемоПрогон заводит тестового пользователя с одноразовым паролем и удаляет его за собой.

Что показал прогон

Стенд: демо-база Управления торговлей 11.5.22, платформа 8.3.27, клиент-серверный вариант. Вызовы по http внутри локальной сети. RLS БСП в базе выключен, демо шло на справочнике расширения с условием в роли.

Показатель Значение Как надо Вердикт Что это значит
Служебная учётка, запрос как есть 6 строк, 830 000 столько, сколько положено спросившему чинить модель ответила бы бухгалтеру про зарплаты директора и главного бухгалтера; 1-5 мс в серии из пяти вызовов
Сеанс спросившего, с РАЗРЕШЕННЫЕ 4 строки, 400 000 4 строки норма пользователь сеанса - бухгалтер; 33-64 мс в серии из пяти, первый вызов самый медленный
Сеанс спросившего, без РАЗРЕШЕННЫЕ ошибка прав - инфо "У пользователя недостаточно прав на исполнение операции над базой данных", 32 мс
УстановитьПривилегированныйРежим(Ложь), затем РАЗРЕШЕННЫЕ 6 строк 4 строки внимание одиночный вызов падает с ошибкой; пара Истина/Ложь проходит, но пользователь сеанса остаётся служебным
ПравоДоступа за бухгалтера Истина / Истина видны 4 строки из 6 внимание чтение справочника и просмотр реквизита Сумма разрешены; про строки под RLS функция не знает
Фоновое задание из сеанса коннектора служебная учётка бухгалтер внимание параметра "от имени" у запуска фонового задания нет
Группы доступа БСП, вход по токену и через ОС не проверялось - инфо условия БСП тоже живут в ролях и применяются к сеансу, прогона на них нет

Как поставить и встроить

  1. 01

    Поставить расширение

    Через "Конфигурация - Расширения конфигурации" или из кода методом РасширенияКонфигурации.Создать(). Заимствованных объектов нет, префикс объектов пс_.

  2. 02

    Проверить публикацию

    Веб-сервер должен публиковать HTTP-сервисы расширений (publishExtensionsByDefault в default.vrd). Если коннектор переиспользует сеансы, новая версия расширения видна только в новом сеансе.

  3. 03

    Прогнать демо

    Одна строка из консоли кода или через MCP: пс_ПраваСпросившего.ДемоПрогон с адресом своей публикации. В ответе обе выборки и строки, которые видны только служебной учётке.

  4. 04

    Разделить каналы в своём коннекторе

    Метаданные и справку оставить под учёткой коннектора, запросы модели отправлять через ВыполнитьОтИмениСпросившего. Старый инструмент выполнения запросов под служебной учёткой убрать.

  5. 05

    Выдать пользователям одно право

    Маленькая роль с правом "Использование" на метод POST сервиса запроса, добавить её в профили групп доступа. К другим HTTP-сервисам базы она доступа не даёт.

Не получается самим? Напишите, разберёмся

Для каждого нового вопроса руководителя приходится собирать отдельную выгрузку и объяснять цифры вручную. Вопросы о продажах и запасах на понятном языке с проверяемыми расчётами. Сначала разбираемся в показателях и качестве исходных данных.

Стоимость
450 000 - 600 000 ₸анализ задачи и погружение; на выходе отчёт и оценка дальнейших работ, внедрение отдельно

Рядом по теме

Частые вопросы

Почему нельзя просто написать нейросети в инструкции, что кому показывать?

Инструкция - это просьба к модели, платформа о ней не знает. Пока запрос выполняется в сеансе служебной учётки, база отдаёт всё, что разрешено этой учётке, и модель может пересказать это любому, кто спросил. Ограничение работает только там, где проверку делает сама платформа, то есть в сеансе нужного пользователя.

Откуда коннектор берёт пароль пользователя и не опасно ли это?

Логин и пароль спросившего подставляет шлюз, то есть бот или MCP-сервер, мимо модели: в параметрах инструмента они попали бы в контекст, историю чата и логи провайдера. Нужен https или вызов внутри одного сервера, по http Basic идёт почти открытым текстом. Лучше отдельная учётка на чтение с ролью сервиса и без интерактивного входа, чем личный пароль сотрудника. Токен вместо пароля не проверялся.

Что получит модель, если в запросе нет РАЗРЕШЕННЫЕ?

Если запрос задевает хоть одну закрытую строку, ошибку "недостаточно прав". С параметром razreshennye=1 сервис сам дописывает слово, и закрытые строки отбрасываются молча, поэтому ответ модели стоит сопровождать оговоркой "по доступным вам данным". Функция дописывания простая: в пакетном запросе ставит слово только в первый запрос.

Сколько это добавляет ко времени ответа?

Один HTTP-вызов и новый сеанс на сервере: в серии из пяти вызовов по http внутри локальной сети от 33 до 64 мс, первый самый медленный. Через прокси и https будет дольше. Как новые сеансы лягут на лицензии и лимиты сеансов, мы не мерили, это стоит проверить у себя.

Работает ли с группами доступа БСП?

Не проверялось: в базе прогона ограничение на уровне записей БСП выключено константой, демо шло на своём справочнике с условием в роли расширения. Условия БСП тоже живут в ролях и применяются платформой к сеансу, поэтому ожидаем то же поведение, но прогона нет.

Защищает ли расширение от всего, что делает коннектор?

Только от запроса модели. Учётка коннектора с полными правами по-прежнему может завести пользователя или сменить пароль. Методы коннектора, которые сами собирают данные под служебной учёткой, RLS не проходят, их надо переводить в сеанс спросившего по одному. Если модель исполняет код, его стоит запускать только после УстановитьБезопасныйРежим(Истина): вариант с кодом на стенде не гонялся.

Бесплатный экспресс-аудит вашей 1С

За 1-2 дня посмотрим вашу базу, найдём, где теряется производительность, и скажем, что с этим делать. Без обязательств.

Получить бесплатный экспресс-аудит

Обсудим задачу

Быстрее всего в WhatsApp: напишите пару строк о задаче, ответим в течение рабочего дня.

+7 707 347 88 04 [email protected]

Удобнее оставить заявку через форму