Как поженить типовой RLS и новый документ

02.02.22

Разработка - БСП (Библиотека стандартных подсистем)

Создание доступа на уровне записей (RLS) для нового документа средствами библиотеки стандартных подсистем (БСП).

Случилась у меня задачка сделать в типовой конфигурации (УНФ 1.6.24.193 - это неважно) доступ на уровне записей (RLS) для нового документа. Документ сделан был быстро методом «Копи-Паста» в моем случае исходным был документ ЗаказПоставщику (Источник), а создавался документ РеестрОтгрузки (НовыйДокумент).

С первого раза с правами не влетело. Не взлетело и потом с пинками…  Далее опишу методику поиска решения, потому-что через пару лет уже сами объекты библиотеки стандартных подсистем (БСП) сильно поменяются.

Просмотр просторов интернета дал мало ссылок. Вот наиболее стоящая:https://forum.infostart.ru/forum9/topic237082/

Также интересной оказалась обработка для раскручивания шаблона в запрос: //infostart.ru/public/264989/

Чтобы понять объем катастрофы, можно установить фильтр конфигурации по подсистемам - «СтандартныеПодсистемы\УправлениеДоступом» :

 

 

Итого: 7 Общих модулей, 13 определяемых типов, 4 справочника, 19 регистров сведений.

Сразу же выделил два регистра с которыми у меня возникли проблемы.

Шаги большого пути:

1. Добавить ссылки на НовыйДокумент, в составных типах данных там где были ссылки на документ Источник. Таких данных оказалось 3. Все они были определяемые типы: ВладелецЗначенийКлючейДоступа, ВладелецЗначенийКлючейДоступаДокумент, ПолеРегистраКлючейДоступаКРегистрам. Эти типы пришлось снимать с поддержки, механизм расширений пока для этого не готов.

2. По условиям задачи требовалось создать новую роль с ограничением доступа по Организации и Контрагентам. В новую роль копируем Шаблоны из роли Источника. Стандартные шаблоны написаны универсально без указания текущего объекта. Обычно всё выносится в параметры. В моем случае копировалось из роли ДобавлениеИзменениеПодсистемыЗакупки :

 

 

Настраиваем права Новой роли: 

 

 

Копировать нужно по очереди отдельно для каждого права. В ограничениях доступа для Прав Чтение, Добавление, Изменение в конструкциях типа:

#ПоЗначениям( "Документ.ЗаказПоставщику","Чтение","",

меняем Источник на НовыйДокумент:

#ПоЗначениям( "Документ.РеестрОтгрузки","Чтение","",

3. Проверяем наличие экспортной процедуры в модуле менеджера НовогоДокумента

Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

 

 

4. Поиск прямого обращения к документу Источника в модулях этой подсистемы позволило обнаружить 2 процедуры. Переопределяем две экспортные процедуры из модуля УправлениеДоступомПереопределяемый в новом или существующем расширении:

 

 

5. В режиме Предприятие создаем новый профиль или в существующем профиле добавляем новую роль. Естественно в профиле должны заданы ограничения доступа:

 

 

6. Добавляем в права пользователя профиль созданный в п.5 и выбираем группы доступа контрагентов. Проверяем и... не работает.

После длительного копания в потрохах RLS, выяснил, что основной структурой данных на которые опираются дополнительные условия в запросах является регистр сведений ТаблицыГруппДоступа. Этот регистр описывает как накладывать условия. Измерение (Таблица) этого РС является ссылкой на Справочник.ИдентификаторыОбъектовМетаданных и в моем случае для нового документа записей не содержалось. Сам справочник оказался заполнен новым документом. 

Были испробованы несколько вариантов заполнения:

Запуск предприятия с ключом обновления.

Запуск Регламентного задания ЗаполнениеДанныхДляОграниченияДоступа.

Запуск в лоб (своей обработке) кода: УправлениеДоступомСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации().

Ничего не сработало. После долгих поисков было обнаружено, что регистр сведений ПраваРолей, для НовогоОбъекта тоже не заполнены. Решение было в вызове двух служебных процедур (во внешней обработке):

&НаСервере

Процедура ОбновитьПраваРолейНаСервере()

ЕстьИзменения = Неопределено;

РегистрыСведений.ПраваРолей.ОбновитьДанныеРегистра(ЕстьИзменения);

Сообщить("ЕстьИзменения:" + Строка(ЕстьИзменения));

КонецПроцедуры

&НаКлиенте

Процедура ОбновитьПраваРолей(Команда)

ОбновитьПраваРолейНаСервере();

КонецПроцедуры

&НаСервере

Процедура ОбновитьВспомогательныеДанныеНаСервере()

РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(); // вызов внутри следующей процедуры не срабатывает, т.к. версии конфы совпадает.

УправлениеДоступомСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации()

КонецПроцедуры

&НаКлиенте

Процедура ОбновитьВспомогательныеДанные(Команда)

ОбновитьВспомогательныеДанныеНаСервере();

КонецПроцедуры

-----

P.S.

Кто найдет более простое решение для заполнения указанных регистров сведений, пишите в комментариях.

RLS

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    127462    688    389    

740

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

14400 руб.

06.12.2023    3841    20    1    

43

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4794    12    2    

38

Запрет доступа к данным по зарплате для БП 3.0 и КА 2.5

Зарплата Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5700 руб.

27.05.2021    33418    206    89    

166

Роли для кладовщика

Логистика, склад и ТМЦ Роли и права Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Расширение, которое позволяет использовать отдельные роли для доступа к складским документам, для доступа к документам раздела "Производство" и для доступа к документам раздела "Покупки".

2520 руб.

21.05.2019    1692797    554    192    

134

Расширение для разграничения доступа к контрагентам и обработка для группового назначения доступа для Бухгалтерии (RLS) 3.0.143.42

Роли и права Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение предназначено для Бухгалтерии предприятия (версии ПРОФ и КОРП). Типовая конфигурация остается на поддержке. С помощью расширения менеджер по продажам будет иметь доступ к контрагентам и списку их документов только в случае, если он является для них ответственным. Пользователю с полными правами также доступна обработка «Назначение ответственных» для группового добавления/удаления ответственного в карточке контрагента. Есть версия данного расширения для клиентов Fresh - в магазине расширений (Fresh)

9360 руб.

14.09.2022    5887    7    4    

9

Универсальная система оповещений в базе или по почте по произвольным условиям, расписанием, ролям и пользователям (Расширение / конфигурация для платформ 8.3.6+, для ЛЮБЫХ баз)

Роли и права Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

Данная система разработана как альтернатива стандартной системе напоминаний. Но имеет ряд существенных преимуществ: отображение в базе или с отправкой по почте, свое расписание, возможность фильтрации по ролям и пользователям, формирование своих запросов и макетов, шаблоны писем, работа в фоне. А также может блокировать работу пользователей при заданных условиях. Может работать в составе любой конфигурации. Имеется справка с описанием возможностей. (Обновление от 20.02.2024, версия 2.2, расширение)

19200 руб.

29.11.2019    24846    14    8    

33
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. JohnyDeath 301 02.02.22 09:08 Сейчас в теме
А если воспользоваться обработкой "Управление доступом" из БСП, где показано всё по шагам и с кусками кода для копипаста, то возможно всё пройдет быстрей и проще.
Свежая статья по этой теме: https://infostart.ru/1c/articles/1594229/
Видео по теме производительного RLS https://youtu.be/GpB4nuO-F0c
ong1990; eeeio; gazpromsera; vandalsvq; Il; +5 Ответить
2. triviumfan 93 07.02.22 13:56 Сейчас в теме
Кто найдет более простое решение для заполнения указанных регистров сведений, пишите в комментариях.

Запустить предприятие с ключом /ЗапуститьОбновлениеИнформационнойБазы или воспользоваться обработкой обновления вспомогательных данных.
3. solary 186 13.07.22 17:22 Сейчас в теме
Спасибо, очень помогло, т.к. знаний по RLS нет, а прикрутить к своему документу очень хотелось.
4. doronin70 02.12.22 00:26 Сейчас в теме
Большое спасибо автору за пункт 1 из шагов большого пути!

А пункт 6 в моем случае (ERP 2.5.8) делается очень просто: Открываем в режиме предприятия форму регистра сведений - Ещё - Обновить данные регистра.
5. 1cNBL 12.01.24 12:13 Сейчас в теме
Если выдает такую ошибку:

Не удалось обновить права ролей конфигурации по причине: Найдены подключенные расширения конфигурации, изменяющие роли конфигурации.
{РегистрСведений.ПраваРолей.МодульМенеджера(48)}:ВызватьИсключение ТекстОшибки

это значит, что в расширении есть заимствованные роли. Их нужно удалить из расширения.
Оставьте свое сообщение