Производительное ограничение доступа на уровне записей БСП

11.06.25

Администрирование - Роли и права

При разработке многие разработчики отказываются от использования RLS из-за проблем с производительностью. В БСП есть возможность ограничивать доступ на уровне записей более оптимизированно. В данной статье покажу, как в конфигурации, в которую внедрена БСП, ограничить доступ на уровне записей для своего документа.

Все примеры в данной статье делались в конфигурации 

Демонстрационная конфигурация "Библиотека стандартных подсистем", редакция 3.1 (3.1.11.189)

 

Подготовка необходимых объектов

  1. Создаем справочник "Склады"
  2. Создаем документ, в моем случае документ называется "Реализация товаров и услуг". В документе один реквизит "Организация" (с типом "СправочникСсылка._ДемоОрганизации") и табличная часть "Товары", с реквизитами "Склад" (с типом СправочникСсылка.Склады), "Номенклатура" (с типом СправочникСсылка._ДемоНоменклатура), "Количество"
  3. Создаем роль "ЧтениеРеализацияТоваровИУслуг". В этой роле для документа "Реализация товаров и услуг" устанавливаем права: Чтение, Просмотр, Ввод по строке
  4. Создаем роль "ЧтениеСклады". В этой роле для справочника Склады устанавливаем права: Чтение, Просмотр, Ввод по строке
  5. Создаем роль "ДобавлениеИзменениеРеализацияТоваровИУслуг". В этой роле для документа "Реализация товаров и услуг" устанавливаем права: Чтение, Добавление, Изменение, Проведение, Отмена проведения, Просмотр, Интерактивное добавление, Редактирование, Интерактивная пометка удаления, Интерактивное снятие пометки удаления, Интерактивное проведение, Интерактивное проведение неоперативное, Интерактивная отмена проведения, Интерактивное изменение проведенных, Ввод по строке
  6. Создаем роль "ДобавлениеИзменениеСклады".  В этой роле для справочника Склады устанавливаем права: Чтение, Добавление, Изменение, Просмотр, Интерактивное добавление, Редактирование, Интерактивная пометка на удаление, Интерактивное снятие пометки удаления, Ввод по строке.
  7. Еще я создал подсистему "ОграничениеНаУровнеЗаписейДемо" и роль ПодсистемаОграничениеНаУровнеЗаписейДемо, в которой добавил право просмотра этой подсистемы

 

Подключение документа к спискам объектов, для которых действует ограничение на уровне записей

Для того чтобы подключить документ к спискам объектов, у которых ограничен доступ на уровне записей, необходимо доработать метод УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа(Списки).

По стандартам разработки не следует размещать свою логику в переопределяемых модулях, а только вызывать свои методы. В связи с этим создадим свой общий серверный модуль, я называл его "УправлениеДоступомДемо".

Теперь код метода УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа(Списки) будет выглядеть так:

Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт
	
	// _Демо начало примера
	_ДемоСтандартныеПодсистемы.ПриЗаполненииСписковСОграничениемДоступа(Списки);
	// _Демо конец примера   
	
    // Вызов метода для добавления своих объектов в список объектов с ограничениями доступа
	УправлениеДоступомДемо.ПриЗаполненииСписковСОграничениемДоступа(Списки);
	
КонецПроцедуры

Соответственно в модуле УправлениеДоступомДемо нужно создать процедуру ПриЗаполненииСписковСОграничениемДоступа(Списки). Параметр процедуры "Списки" - это соответствие, ключ которого объект метаданных, а значение Булево, если в значении указано Истина, то текст самого ограничения указывается в модуле менеджера, если Ложь, то текст ограничения указывается в методе УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа()

Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт  
	
	Списки.Вставить(Метаданные.Документы.РеализацияТоваровИУслуг, Истина);
	
КонецПроцедуры

 

Заполнение ограничения доступа

Разработка ограничений доступа заключается в написании простого запроса с некоторыми упрощениями. Примеры таких запросов есть на ИТС в инструкции к БСП в главе 3. В данном примере я буду использовать простое ограничение доступа. Для этого в модуле менеджера документа "Реализация товаров и услуг" необходимо создать процедуру ПриЗаполненииОграниченияДоступа(Ограничение) и прописать там ограничение

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем 

#Область УправлениеДоступом
// СтандартныеПодсистемы.УправлениеДоступом

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	
	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)";
	
КонецПроцедуры

// Конец СтандартныеПодсистемы.УправлениеДоступом
#КонецОбласти

#КонецОбласти

#КонецОбласти

#КонецЕсли

Далее необходимо создать или обновить процедуры в форме документа ПриЧтенииНаСервере() и ПослеЗаписиНаСервере()

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)   
	
	// СтандартныеПодсистемы.УправлениеДоступом
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УправлениеДоступом

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
	
	// СтандартныеПодсистемы.УправлениеДоступом
	Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
		МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
		МодульУправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
	КонецЕсли;
	// Конец СтандартныеПодсистемы.УправлениеДоступом

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

Далее необходимо доработать роли, которые создали в начале. Для ролей "ЧтениеРеализацияТоваровИУслуг" и "ДобавлениеИзменениеРеализацияТоваровИУслуг" добавляем шаблон ограничений.

Наименование шаблона: "ДляОбъекта(ПолеОбъекта)".

Текст шаблона: 

 

У роли "ЧтениеРеализацияТоваровИУслуг" для права "Чтение", нужно указать ограничение доступа к данным.

Поля: <Прочие поля>.

Ограничение Доступа: 

 

У роли "ДобавлениеИзменениеРеализацияТоваровИУслуг" нужно указать такие же ограничения для прав: Чтение, Добавление, Изменение


Далее необходимо изменить определяемые типы "ВладелецЗначенийКлючейДоступа" и  "ВладелецЗначенийКлючейДоступаДокумент".

В определяемом типе "ВладелецЗначенийКлючейДоступа" добавляем тип "ДокументСсылка.РеализацияТоваровИУслуг"

В определяемом типе "ВладелецЗначенийКлючейДоступаДокумент" добавляем тип "ДокументОбъект.РеализацияТоваровИУслуг"


На этом этапе необходимо обновить информационную базу и выполнить запуск с параметром /c ЗапуститьОбновлениеИнформационнойБазы

 

 

 

Настройка профилей групп доступа

Для того чтобы наше ограничение заработало, нужно создать профиль групп доступа и саму группу доступа.

Для этого нужно перейти в Администрирование -> Настройка пользователей и прав -> Профили групп доступа.

Создаем новый профиль, в наименовании я указал "Ограничение доступа по организации для реализации (демо)".

В разрешенные роли нужно добавить: Базовые права БСП, Демо: Чтение нормативно-справочной информации (в моем случае, чтобы была возможность чтения справочника организации), Добавление изменение реализация товаров и услуг, Чтение реализация товаров и услуг, Подсистема ограничение на уровне записей демо, Демо: Базовые права (из расширения) (ставится автоматически, если используется демо конфигурация БСП), если используется конфигурация "Демо БСП", то необходимо так же добавить роль Демо: Базовые права БСП.

В результате профиль будет выглядеть так:

 


На закладке "Ограничения доступа" необходимо указать ограничение

 

 

Вид доступа: Демо: Организации

Значение доступа: Все запрещены, исключения назначаются в группах доступа


Записываем элемент справочника, переходим по ссылке "Группы доступа"

Создаем новую группу, в моем случае наименование группы Реализации с организацией "Ромашка ОАО".

Добавляем пользователей, который будут входить в эту группу.

 

 

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

 

 

Записываем элемент.

На этом разработка и настройка ограничений закончена. Если зайти в программу под пользователем, которого указали в группе доступа, то у него для документа "Реализация товаров и услуг", будет ограничение по организации "Ромашка ОАО".

 

Установка ограничений по своему виду доступа

На первом этапе мы установили ограничение доступа по справочнику, который уже был включен в список видов доступа (Организации).

Теперь сделаем ограничение по справочнику "Склады", который мы добавили в самом начале.

Для добавления своего вида доступа необходимо изменить процедуру "УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа(ВидыДоступа)". В эту процедуру добавляем одноименный метод в модуле "УправлениеДоступомДемо".

Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
	
	// _Демо начало примера
	_ДемоСтандартныеПодсистемы.ПриЗаполненииВидовДоступа(ВидыДоступа);
	// _Демо конец примера
	
	// Добавление новых видов доступа
	УправлениеДоступомДемо.ПриЗаполненииВидовДоступа(ВидыДоступа);
КонецПроцедуры

Параметры "ВидДоступа", это таблица значений, в которую необходимо добавить свой вид доступа, примеры как добавлять есть в описании процедуры "УправлениеДоступомПереопределяемый.ПриЗаполненииВидовДоступа(ВидыДоступа)". В модуле "УправлениеДоступомДемо", в процедуре ПриЗаполненииВидовДоступа(ВидыДоступа) делаем добавление своего вида доступа.

Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
	ВидДоступа = ВидыДоступа.Добавить();
	ВидДоступа.Имя = "Склады";
	ВидДоступа.Представление = НСтр("ru = 'Склады'");
	ВидДоступа.ТипЗначений   = Тип("СправочникСсылка.Склады");
КонецПроцедуры

Далее необходимо изменить определяемые типы "ЗначениеДоступа", "ЗначениеДоступаОбъект".

В "ЗначениеДоступа" добавляем тип "СправочникСсылка.Склады".

В "ЗначениеДоступаОбъект" добавляем типа "СправочникОбъект.Склады".

Далее в модуле менеджера документа "Реализация товаров и услуг" необходимо доработать ограничение.

Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	
	Ограничение.Текст =
	"РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЗначениеРазрешено(Организация)
	|	И ДляВсехСтрок(ЗначениеРазрешено(Товары.Склад, NULL КАК Истина, ПустаяСсылка как Истина))";
	
КонецПроцедуры

Добавленная строка "И ДляВсехСтрок(ЗначениеРазрешено(Товары.Склад, NULL КАК Истина, ПустаяСсылка как Истина))" означает что кроме организации, нужно еще проверять чтобы во всех строках документа был указан доступный пользователю склад.

Уточнение NULL КАК Истина указывает на то что документы с пустой табличной частью так же доступны пользователю. 

Уточнение ПустаяСсылка как Истина указывает на то что документы в не заполненным складом в табличной части так же доступны пользователю

Далее необходимо обновить информационную базу и выполнить запуск с параметром /c ЗапуститьОбновлениеИнформационнойБазы

Далее необходимо изменить профиль групп доступа, добавив в него ограничение по новому виду доступа "Склады", так же как делали для вида доступа "Организации".

В группе доступа, на закладке "Ограничение доступа", необходимо указать доступные этой группе пользователей склады, так же как это делали для ограничения "Организации"

На этом настройка своего вида доступа закончена. 

Пользователи, которые будут включены в группу доступа, будут иметь возможность работать только с документами, у который указана организация "Ромашка ОАО", и склад будет такой же как указан в группе доступа, либо табличная часть пустая, либо склад не заполнен.

БСП Библиотека стандартный подсистем RLS Ограничение доступа на уровне записей

См. также

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

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

15500 руб.

02.09.2020    196073    1085    409    

1006

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

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

15000 руб.

10.11.2023    15512    66    33    

84

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

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

5940 руб.

27.05.2021    43119    320    106    

254

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 17.06.2025, версия 1.3

19200 руб.

06.12.2023    14240    61    8    

90

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

Мучаетесь со списком типовых ролей? Не хотите иметь дело с конфигуратором? Не знаете что делают имеющиеся права в базе? Хотите просто и удобно добавлять и настраивать, по одному клику, доступы и поведение при записи/удалении/проведении/открытии списка/фильтрацию данных в списках или формах выбора для пользователя или группы пользователей и для любого объекта? Не хотите переживать, что при обновлении конфигурации все права и роли слетят? (Обновление от 27.03.2023, версия 1.9)

16800 руб.

21.03.2022    17041    27    54    

49

Ценообразование, анализ цен Роли и права Системный администратор 1С v8.3 Управление правами 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Расширение возможностей программы 1С:УНФ 1.6 и 3.0. Функционал расширения - разграничение всевозможных прав пользователей и контроль при совершении различных действий.

3000 руб.

23.02.2018    61515    173    264    

164

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

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

9360 руб.

14.09.2022    6914    11    6    

15
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Xershi 1535 12.06.25 08:26 Сейчас в теме
Приветствую, разбирался с рлс. Тексты шаблонов откуда взялись? Или он просто универсальный для бсп?
2. AlexF1 45 12.06.25 10:15 Сейчас в теме
(1) Привет! текст шаблона можно взять из роли "ИзменениеУчастниковГруппДоступа", которая входит в подсистему "Управление доступом"
3. Xershi 1535 13.06.25 12:23 Сейчас в теме
(2) текст то можно взять, вопрос про то когда нужна своя логика. Универсален ли текст запроса в РЛС, а модификация ведется в конфигурации кодом?
4. AlexF1 45 13.06.25 14:46 Сейчас в теме
(3) Шаблон универсален для любого объекта, для регистров есть другой шаблон. Само ограничение прописывается в процедуре ПриЗаполненииОграниченияДоступа()
5. Xershi 1535 13.06.25 15:51 Сейчас в теме
(4) в шаблоне я не разобрался, думал в нем нужно ковырять. В итоге в одной статье в эту процедуру и внёс свою доработку. Всё отработало.
6. user1832003 58 14.06.25 19:27 Сейчас в теме
чет я не понял. тут же стандартный бспшный рлк описан, которых во всех типовых конфигурациях фирмы 1с используется, так?
7. AlexF1 45 14.06.25 20:39 Сейчас в теме
(6) Совершенно верно, в названии статьи так и указано. Описан пример как для своего объекта настроить ограничение, которое реализовано в БСП
8. user1832003 58 16.06.25 02:05 Сейчас в теме
(7) А я чето подумал, что используется что-то что в типовых не используется....праздники
9. and_sk 14 16.06.25 10:48 Сейчас в теме
в стандартных конфигах простоту портит справочник "идентификаторы объектов"
10. skeptik2105 16.06.25 11:36 Сейчас в теме
Добавлю. В типовых конфигурациях (УТ, ERP, КА) два варианта работы RLS: стандартный и производительный (терминология 1С). В статье описан производительный вариант работы.
В Документообороте доступен только производительный.
Подробнее про производительный в этой статье: https://infostart.ru/1c/articles/1656341/
Прикрепленные файлы:
11. AlexF1 45 16.06.25 11:44 Сейчас в теме
(10) Спасибо за дополнение, все верно.
12. kauksi 217 16.06.25 15:15 Сейчас в теме
все сдела, но в списке есть документы у которых организация "Объект не найден". Что я делаю не так? не должно быть их...
13. AlexF1 45 16.06.25 17:14 Сейчас в теме
(12) Не видя конфигурации сложно сказать. Реализация из примера отрабатывает правильно, в списке не должно быть документа, на который нет доступа
14. kauksi 217 24.06.25 16:45 Сейчас в теме
(13) Я делаю это для нового документа в расширении. Да получается у пользователя есть доступ к документам организации, но нет роли для доступа к самому справочнику Организации - поэтому список документов верный, но сам справочник не может прочитать. Какая то другая роль (профиль группы доступа) должна давать выбрать только "нужную" организацию, либо нужно еще как то дополнительно прописывать это ограничение и в расширении...
Оставьте свое сообщение