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