При работе с веб-сервисами 1С, особенно если они реализованы внутри расширений конфигурации, программисты часто сталкиваются с неприятной ошибкой: Нарушение прав доступа к операции Web-сервиса. Ситуация осложняется тем, что в конфигураторе все права могут быть настроены верно, а роли — назначены пользователю. В этой статье мы разберем по шагам, почему возникает эта проблема и как ее гарантированно решить.
Рассмотрим типичный текст ошибки, который возвращает SOAP-сервер:
Ошибка при вызове метода контекста (GetAllProperties): При вызове веб-сервиса произошла ошибка.
Ошибка SOAP сервера: Нарушение прав доступа к операции Web-сервиса: GetAllProperties()
Код ошибки: Client
Эта ошибка указывает на то, что сеанс, под которым выполняется запрос к 1С, не обладает достаточными привилегиями для выполнения конкретной операции веб-сервиса. Разберем основные причины и способы их устранения.
Проанализируем ситуацию: если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), механизмы управления доступом работают сложнее, чем простое считывание ролей из конфигуратора. Система хранит кэшированные таблицы прав (RLS) и соответствия ролей профилям групп доступа.
Часто возникает программный «рассинхрон», когда роль в расширении есть, но система не «видит» ее в актуальном сеансе пользователя. Выполним следующие действия:
Важно: именно процедура записи объекта пользователя в интерфейсе БСП инициирует обновление внутренних таблиц прав доступа. Как показывает практика, это действие часто является «магическим» решением, которое устраняет проблему без изменения кода. Для автоматизации этого процесса можно использовать инструмент для точечного пересчета прав доступа пользователей.
Если веб-сервис был добавлен в расширение недавно, БСП может просто не знать о существовании нового объекта метаданных. В этом случае назначение прав в интерфейсе может не давать результата, так как ссылка на объект в справочнике идентификаторов отсутствует или некорректна. При возникновении сложностей с регистрацией новых прав в БСП можно использовать методику добавления и обновления ролей в конфигурации.
Разберем, как принудительно обновить эти данные. Для этого можно воспользоваться консолью кода или внешней обработкой, выполнив следующий фрагмент:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанные();
// Если веб-сервис находится именно в расширении,
// может потребоваться аналогичный метод для расширений
Справочники.ИдентификаторыОбъектовРасширений.ОбновитьДанные();
После выполнения этой команды система перечитает структуру объектов расширения, и права на операции веб-сервиса станут доступны для корректного назначения в профилях групп доступа.
Выясним причину, по которой даже после настройки прав ошибка может сохраняться. Веб-серверы, такие как IIS или Apache, активно используют кэширование пулов соединений и метаданных. Когда веб-сервис вызывается через файл публикации .vrd, сеанс может «залипнуть» со старыми параметрами прав.
Проанализируем шаги по очистке кэша на стороне сервера:
World Wide Web Publishing Service для IIS или службу Apache).Посмотрим на ситуацию со стороны общих настроек ролей. Для того чтобы пользователь вообще мог авторизоваться через веб-сервис, у его ролей (включая роли в расширении) должно быть установлено право Внешнее соединение.
Кроме того, если операция веб-сервиса GetAllProperties обращается к справочникам или документам, убедитесь, что у пользователя есть права на Чтение и Просмотр соответствующих объектов. Иногда ошибка «нарушение прав доступа к операции» маскирует более глубокую ошибку отсутствия прав на конкретные данные внутри этой операции.
Проанализируем содержимое файла публикации default.vrd, который находится в каталоге на веб-сервере. В нем могут быть жестко заданы параметры, ограничивающие доступ.
Проверьте следующие моменты:
ws (web-services) ваш сервис разрешен для публикации.publishExtensionsByDefault="true". Если он установлен в false, расширения могут игнорироваться веб-сервером.usr="..." и pwd="...", веб-сервис всегда будет запускаться под этим конкретным пользователем. Убедитесь, что именно у этого пользователя в базе 1С настроены права на роли из расширения.Рассмотрим ситуацию, когда в основной конфигурации и в расширении существуют одноименные объекты. Для веб-сервисов критически важно свойство Namespace (Пространство имен). Если пространство имен вашего веб-сервиса в расширении совпадает с пространством имен какого-либо сервиса в основной конфигурации, платформа может попытаться вызвать операцию не того объекта, что приведет к ошибке авторизации.
Рекомендуется всегда использовать уникальное пространство имен для расширений, например: http://www.your-company.ru/extension-name.
Подводя итог, можно сказать, что решение проблемы нарушения прав к веб-сервису в 90% случаев сводится к перезаписи пользователя в режиме Предприятие для обновления кэша БСП и последующему ребуту веб-сервера. Если эти действия не помогают, следует переходить к проверке идентификаторов метаданных и анализу прав на вспомогательные объекты доступа.