При разработке и внедрении расширений конфигурации разработчики часто сталкиваются с ситуацией, когда объект заимствован, права на него (казалось бы) назначены, но пользователь при запуске системы все равно получает ошибку «Нарушение прав доступа». Разберем по шагам, почему это происходит и где именно искать «потерянные» права.
Первое, что необходимо проанализировать — это назначение прав через механизм профилей групп доступа. В типовых конфигурациях на базе БСП (Библиотека стандартных подсистем) недостаточно просто добавить роль в расширении. Важно, чтобы эта роль была включена в профиль группы доступа, назначенный пользователю.
Рассмотрим подробнее:
Подсистемы, так как зачастую видимость объектов в интерфейсе определяется правами на подсистему, в которую включен объект.Базовые права. Если расширение затрагивает механизмы, требующие специальных разрешений, пользователь может не иметь доступа к объектам расширения без наличия базовой роли, дающей права на работу с конфигурацией расширений.Одной из частых скрытых причин является рассинхронизация Идентификаторов объектов расширений. При заимствовании объектов 1С создает запись во вспомогательном справочнике. Если эта связь нарушена, платформа не может сопоставить роль пользователя с конкретным объектом метаданных.
Что нужно сделать:
Идентификаторы объектов расширений.Если на уровне основной конфигурации для объекта настроен RLS (ограничения доступа на уровне записей), то при заимствовании эти ограничения могут накладываться и на расширение. Если у пользователя нет прав на данные, определяющие доступ (например, права на конкретную Организацию или Группу доступа), он не увидит объект или получит ошибку доступа.
Проанализируем ситуацию с RLS:
Используйте отчет «Права доступа» (доступен в стандартных интерфейсах БСП). Он наглядно покажет, какие именно ограничения накладываются на пользователя для выбранного объекта. Если вы видите, что сработал шаблон ограничения, проверьте, назначены ли пользователю права на сопутствующие данные, указанные в шаблоне.
В конфигурациях уровня КА 2.5 или ERP права часто проверяются не только на уровне СУБД (RLS), но и программно. Разберем методы, которые стоит проверить:
Часто в коде используются вызовы вида:
// Пример программной проверки доступа
Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда
// Проверка доступа к конкретному объекту или реквизиту
Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ВашСправочник) Тогда
// Обработка отсутствия прав
КонецЕсли;
КонецЕсли;
Если в вашем расширении есть код, использующий функцию ПравоДоступа, обратите внимание, что она проверяет наличие права на весь объект. Если вы программно обращаетесь к специфичному реквизиту, права на него должны быть явно прописаны в роли.
Если ваша система использует Механизм разделения данных (например, в облачных конфигурациях или при использовании разделителей в 1С), убедитесь, что объект расширения корректно включен в область данных. Если объект метаданных не имеет доступа к данным текущего разделителя, платформа будет блокировать операции с ним, даже при наличии «полных прав» в конфигураторе.
Для быстрого поиска причины рекомендуем следующий алгоритм:
EXCP с контекстом Access. Это даст точный ответ, какой объект или какое право блокирует платформу в момент ошибки.AccessManagement, значит, проблема в настройках групп доступа или RLS.Просмотр, из-за чего объект просто не отображается в списке.Работая совместно с этими инструментами, вы сможете локализовать любую проблему прав доступа, связанную с расширением конфигурации.