При работе с современными конфигурациями 1С, такими как Бухгалтерия предприятия 3.0, разработчики часто сталкиваются с ситуацией: новая роль создана в конфигураторе или добавлена через расширение, назначена пользователю, но фактически не работает. Даже «Отчет по правам доступа» может показывать, что роль не активна, хотя в конфигураторе все флажки проставлены правильно. Давайте разберем по шагам, почему это происходит и как заставить систему «увидеть» новые права доступа.
В типовых решениях 1С (БП 3.0, ЗУП 3.1, ERP) за права отвечает не только платформа, но и программный слой — подсистема «Управление доступом» из состава Библиотеки стандартных подсистем (БСП). Когда мы добавляем роль, платформа узнает о ней сразу, а вот подсистема управления доступом — нет. Рассмотрим основные причины, по которым роль может игнорироваться.
Это самая распространенная причина. БСП хранит список всех объектов метаданных (включая роли) в специальном справочнике ИдентификаторыОбъектовМетаданных. Если вы создали роль в конфигураторе, но не обновили этот справочник в пользовательском режиме, программные механизмы проверки прав (включая RLS) просто не поймут, что это за роль.
Проанализируем процесс обновления. Чтобы синхронизировать метаданные конфигуратора и данные в базе, выполните следующие действия:
Идентификаторы объектов метаданных.Если кнопка отсутствует или обновление не помогает, можно запустить принудительное обновление информационной базы, запустив 1С с параметром командной строки:
/С ЗапуститьОбновлениеИнформационнойБазы
В современных версиях БП 3.0 используется так называемый «производительный RLS». В отличие от старого метода, где условия запроса RLS вычислялись «на лету», новый механизм использует вспомогательные таблицы (регистры сведений), в которых заранее рассчитаны права для каждой пары «Роль — Объект — Условие».
Если вы скопировали роль (например, ДобавлениеИзменениеДанныхБухгалтерии) и изменили в ней шаблоны ограничений, система должна пересчитать эти вспомогательные таблицы. Выясним, как инициировать этот процесс программно. Для этого можно воспользоваться внешней обработкой и выполнить следующий код:
// Инициализация обновления вспомогательных данных управления доступом
УправлениеДоступом.ОбновитьДанныеПослеИзмененияСоставаРолей();
// Дополнительно можно запустить полное обновление доступа
УправлениеДоступомСлужебный.ЗаполнитьНаборыЗначенийДоступа();
После выполнения этого кода система запустит фоновые задания по пересчету прав. Проверить результат можно в регистре сведений Права ролей. Если вашей новой роли там нет, значит, БСП её все еще игнорирует.
Добавление ролей через расширения — удобный механизм, но он имеет свои «подводные камни». Рассмотрим ситуацию, когда роль добавлена в расширение и включена в новую подсистему, но подсистема пропадает из интерфейса.
Проанализируем причины:
Чтение и Просмотр не только на саму подсистему в расширении, но и на все родительские подсистемы.Расширения (в пользовательском режиме) и убедиться, что состояние расширения отмечено как корректное.Вызов сервера).Если вы видите в отчете, что роль не активна, это означает, что профиль групп доступа, в который включена роль, не прошел внутреннюю валидацию БСП. Рассмотрим подробнее, почему это происходит:
Профили групп доступа указали её до того, как обновили идентификаторы метаданных.ПараметрыСеанса.КэшПравДоступа = Неопределено; (в консоли кода).При копировании сложных ролей, таких как ДобавлениеИзменениеДанныхБухгалтерии, вы копируете и сложные запросы RLS. Если вы «несильно редактировали» роль, убрав доступ к некоторым документам, вы могли случайно удалить объекты, которые упоминаются в текстах запросов RLS других (оставшихся) документов.
Разберем, как проверить корректность запроса RLS:
Чтение. В 1С RLS может выдавать ошибку доступа, если в условии ограничения используется таблица, к которой нет доступа хотя бы на чтение.Для успешного внедрения новой роли в БП 3.0 придерживайтесь следующего алгоритма:
1. Создайте роль в конфигураторе (или расширении), назначив права на объекты и прописав (или скопировав) шаблоны RLS.
2. Обязательно добавьте роль в одну из подсистем, иначе она может некорректно определяться механизмами БСП.
3. Обновите Идентификаторы объектов метаданных через пользовательский интерфейс или программно.
4. Создайте Профиль групп доступа и включите в него вашу роль. Назначьте этот профиль пользователю.
5. Если используется RLS, принудительно запустите обновление прав через УправлениеДоступом.ОбновитьДанныеПослеИзмененияСоставаРолей().
Важный момент: Если у пользователя назначено несколько ролей (стандартная и ваша), и в одной из них RLS разрешает только 1 организацию, а в другой — 2 организации, то по правилам 1С права суммируются (логическое ИЛИ). Если ваша новая роль «не подхватилась» системой БСП, то будут действовать только ограничения старой роли, что мы и наблюдали в исходной ситуации.