Групповая замена/добавление ограничений доступа RLS

21.06.15

Администрирование - Информационная безопасность

Предлагается способ групповой замены/добавления ограничений доступа RLS (Record Level Security, на уровне записей) через обработку XML-файлов конфигурации с наборами прав, как объектов, при помощи механизма ПостроительDOM.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Замена/добавление ограничений RLS
.epf 23,10Kb
64
64 Скачать (3 SM) Купить за 2 450 руб.

Допустим, поставлена задача ограничения доступа к некоторым организациям с одним условием. Необходимо полное исчезновение организаций: чтобы их не было нигде, ни в договорах контрагентов, ни в кассах ККМ, ни в списках документов, ни в отчетах и т.д. и т.п.

Рассмотрим для примера УТ 10.3.

На первый взгляд ничего сложного. Создаем группу пользователей в справочнике "Группы пользователей", заполняем пользователями (неполноправными), которым надо ограничить доступ к организациям. Задаем доступные для просмотра организации в регистре сведений "Настройки прав доступа пользователей". Включаем константу "Ограничить права доступа на уровне записей". Что видит пользователь в программе после перезапуска. В справочнике "Организации" только те, что разрешены. Но там, где встречаются скрытые организации в поле "Организация" написано "Объект не найден...". Доступа к редактированию этих объектов нет, но не совсем то, что задумывалось.

ОбъектНеНайден

 

Это происходит от того, что в правах доступа к объектам (кроме справочника "Организации", контактной информации и еще некоторых объектов, не прописаны ограничения доступа на уровне записей. Особенно в нетиповых конфигурациях, когда новые роли и метаданные добавляются в конфигурацию в условиях, приближенных к боевым, без оглядки на будущее. И даже в типовой УТ 10.3, у роли МенеджерПоПродажам, например, нет ограничения доступа на уровне записей у корректировки реализации, в отличие от документа-основания - реализации товаров и услуг:

 ОграниченияПоОбъектам


Что есть на программном уровне

На программном уровне платформа 8.2 позволяет посмотреть, есть ли у выбранной роли право чтения/добавления/изменения/удаления выбранного метаданного, а также имеется ли у этого права ограничение доступа RLS, но самого значения ограничения доступа нет:

ЕстьПравоНаЧтение = Ложь;
ЕстьОграничениеРЛС = Ложь;
МетаданныеРоль = Метаданные.Роли["МенеджерПоПродажам"];
МетаданныеСправочника = Метаданные.Справочники["Организации"];
ПравоНаЧтение = ПараметрыДоступа("Read", МетаданныеСправочника, "Ссылка", МетаданныеРоль);		
Если ПравоНаЧтение.Доступность Тогда
	ЕстьПравоНаЧтение = Истина;
	Если ПравоНаЧтение.ОграничениеУсловием Тогда
		ЕстьОграничениеРЛС = Истина; 
	КонецЕсли;
КонецЕсли;

У большинства ролей уже написаны шаблоны ограничений доступа. Их можно посмотреть, открыв роль в конфигураторе и перейдя на вкладку "Шаблоны ограничений".

Вручную ограничить можно, но долго. Запустить поиск по дереву конфигурации по слову Организация. Пройтись по дереву, открывая каждый найденный объект, пройтись по правам этого объекта для каждой роли, и для ролей, имеющих доступ к объекту в разрешенных правах проставить типовой шаблон или свой текст ограничения доступа.

Попробуем автоматизировать.


Как все-таки можно посмотреть содержимое ограничений доступа RLS программно

Выгрузим файлы конфигурации. Конфигурация - Выгрузить файлы конфигурации.

Оставим флажки только на правах:

ВыгрузитьФайлыКонфигурации

Посмотрим XML-файл Роль.МенеджерПоПродажам.Права.xml.

Ветка прав доступа с ограничениями на документ "Заказ покупателя":

Права доступа к заказу покупателя

В конце файла находятся сами шаблоны ограничений для выбранной роли.

Шаблоны ограничений прав доступа


Как это обработать

Используем встроенный в конфигурацию механизм ПостроительDOM.

Прочитаем документ.

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПолныйПутькФайлу);
	
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);

Затем, при помощи ОбходДереваDOM, обойдем дерево.

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

Там, где содержится условие ограничения доступа, заменяем на нужное нам, если нет - добавляем.

ОбходДереваDOM = Новый ОбходДереваDOM(ДокументDOM);

// переход на уровень rights
ТекУзел = ОбходДереваDOM.СледующийУзел();
// переход на уровень object
ТекУзел = ОбходДереваDOM.СледующийУзел();

// ОБХОД ОБЪЕКТОВ
Пока ТекУзел <> Неопределено Цикл		
	// переход вглубь дерева на уровень name
	ТекУзел = ОбходДереваDOM.СледующийУзел();
	// переход на уровень right
	ТекУзел = ОбходДереваDOM.СледующийСоседний();
	// ОБХОД ПРАВ
	Пока ТекУзел <> Неопределено Цикл
		ОбработкаПрерыванияПользователя();
		УзелПрава = ОбходДереваDOM.ТекущийУзел;		
		
		// переход вглубь дерева на уровень name
		ТекУзел = ОбходДереваDOM.СледующийУзел();
		ЕстьОграничениеПоУсловию = Ложь;
		Пока ТекУзел <> Неопределено Цикл
			ОбработкаПрерыванияПользователя();
			Если ТекУзел.ИмяУзла = "restrictionByCondition" Тогда
				ЕстьОграничениеПоУсловию = Истина;
				// переход вглубь дерева на уровень condition
				ТекУзел = ОбходДереваDOM.СледующийУзел();					
				ТекУзел.ПервыйДочерний.ТекстовоеСодержимое = НовоеЗначениеОграничения;
				Сообщить(ИмяМетаданного + ": заменено ограничение " + ТекУзел.ПервыйДочерний.ТекстовоеСодержимое);
				ВнесеныИзменения = Истина;
				Прервать;
			КонецЕсли; 
			ТекУзел = ОбходДереваDOM.СледующийСоседний();
		КонецЦикла;
		Если НЕ ЕстьОграничениеПоУсловию Тогда
			// вставка условия
			НовыйУзелЗначения1 = ДокументDOM.СоздатьЭлемент("restrictionByCondition");
			НовыйУзелЗначения2 = ДокументDOM.СоздатьЭлемент("condition");
			НовыйУзелЗначения2.ТекстовоеСодержимое = НовоеЗначениеОграничения;
			НовыйУзелЗначения1.ДобавитьДочерний(НовыйУзелЗначения2);
			УзелПрава.ДобавитьДочерний(НовыйУзелЗначения1);
			Сообщить(ИмяМетаданного + ": добавлено ограничение " + УзелПрава.ПервыйДочерний.ТекстовоеСодержимое);
			ВнесеныИзменения = Истина;
		КонецЕсли;			
	        // возврат на уровень прав
		ОбходДереваDOM.ТекущийУзел = УзелПрава;
		ТекУзел = ОбходДереваDOM.СледующийСоседний();
	КонецЦикла;

	// возврат на уровень объекта
	ОбходДереваDOM.ТекущийУзел = УзелОбъекта;
	ТекУзел = ОбходДереваDOM.СледующийСоседний();
КонецЦикла;

Обработанный файл записываем.

ЧтениеXML.Закрыть();
	
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяСохраняемогоФайла);
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
ЗаписьXML.Закрыть();

И последнее - загружаем измененные файлы обратно. Конфигурация - Загрузить файлы конфигурации.

Также оставим флажки только на правах.

 ЗагрузитьФайлыКонфигурации

Сохраняем измененную конфигурацию и готово.


Что умеет приложенная к статье обработка

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

- Позволяет пропустить конструкции запрета ГДЕ Ложь

- Позволяет добавлять ограничение роли, а не заменять при наличии уже существующего ограничения

 Настройка

- Отбирает для редактирования только те роли, которые имеют право изменять выбранные метаданные

- Позволяет дополнительно отобрать по сформированным спискам роли и метаданные

 Отборы по ролям

Отборы по объектам

- Позволяет указать текст ограничения доступа для четырех видов ограничений: чтение, изменение, добавление, удаление; для регистров сведений, накопления и т.д. будут применены только чтение и изменение

- Анализирует выгруженные файлы прав, изменяет в них отмеченные роли и метаданные. Измененные файлы обработка складывает в подпапку "_out" указанной папки с файлами.

Права доступа

- Позволяет копировать шаблоны ограничений доступа с одной роли на другую (вкладка Отборы, вкладка Роли, кнопка Копировать шаблоны ролей)

- В качестве материала для анализа формирует кросс-таблицу по ролям и метаданным с указанием доступа и наличием ограничений доступа по RLS по всем ролям и метаданным по отбору

 Таблица ролей

- Может использоваться в качестве учебного материала по обходу дерева метаданных и обработке xml-файлов через механизм ПостроительDOM

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

РЛС шаблоны ограничений доступа ПостроительDOM ОбходДереваDOM

См. также

Информационная безопасность Системный администратор Программист Платные (руб)

AUTO VPN (portable) - автоматизация подключения пользователей к удаленному рабочему месту или сети посредством создания автоматического VPN (L2TP или L2TP/IPSEC и т.д.) подключения без ввода настроек пользователем (с возможностью скрытия этих настроек от пользователя). Программа автоматически выполняет подключение к VPN серверу и после успешного коннекта , если необходимо, подключение к серверу удаленных рабочих столов (RDP).

1200 руб.

24.03.2020    15367    25    32    

35

Информационная безопасность Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Предлагается внешняя обработка для просмотра данных в формате ASN1. Есть 2 режима: загрузка из бинарного формата и из BASE64. Реализована функция извлечения всех сертификатов, которые можно найти в ASN1-файле. В дополнении к этому продукту предлагается методическая помощь по вопросам, связанным с технической реализацией криптографии и шифрования в 1С.

2400 руб.

29.08.2016    30055    9    1    

10

Информационная безопасность Пароли Платформа 1С v8.3 Бесплатно (free)

Все еще храните пароли в базе? Тогда мы идем к вам! Безопасное и надежное хранение секретов. JWT авторизация. Удобный интерфейс. Демо конфигурация. Бесплатно.

30.05.2024    6216    kamisov    17    

60

Информационная безопасность Программист Платформа 1С v8.3 Бесплатно (free)

Рассмотрим в статье более подробную и последовательную настройку аутентификации в 1С с использованием распространенной технологии JWT, которая пришла в программу в платформе версии 8.3.21.1302.

27.02.2024    7327    PROSTO-1C    10    

39

Информационная безопасность Программист Платформа 1С v8.3 Абонемент ($m)

Интеграционные решения стали неотъемлемой частью нашей жизни. Правилом хорошего тона в современных приложениях является не давать интегратору доступ к чувствительным данным. Device flow позволяет аутентифицировать пользователя, не показывая приложению чувствительные данные (например: логин и пароль)<br> Рассмотрим Device flow аутентификацию, в приложении, на примере OpenID провайдера Yandex.

1 стартмани

27.10.2023    2412    platonov.e    1    

23

Информационная безопасность Системный администратор Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Продукты на основе решений 1С уверенной поступью захватывают рынок учётных систем в стране. Широкое распространение программ всегда порождает большой интерес к ним со стороны злоумышленников, а пользователь 1С это одна из дверей в защищённый информационный контур предприятия. Обработка позволяет быстро и комплексно оценить настройки безопасности конкретной базы и возможности пользователя этой базы на сервере. Также можно оценить некоторые аспекты сетевой безопасности предприятия со стороны сервера 1С.

5 стартмани

24.04.2023    6254    20    soulner    8    

32

Информационная безопасность Системный администратор Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

1С, начиная с версии платформы 8.3.21, добавили в систему возможность двойной аутентификации. Как это работает: в пользователе информационной базы появилось свойство «Аутентификация токеном доступа» (АутентификацияТокеномДоступа во встроенном языке), если установить этот признак и осуществить ряд манипуляций на встроенном языке, то появляется возможность при аутентификации отправлять HTTP запросы, которые и реализуют этот самый второй фактор. Данное расширение позволяет организовать двухфакторную аутентификацию с помощью электронной почты или мессенджера Telegram.

2 стартмани

08.12.2022    7279    50    Silenser    12    

24
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. vasyak319 152 26.04.15 23:36 Сейчас в теме
Сам вряд ли воспользуюсь, но плюсану, ибо круто.
cargobird; +1 Ответить
2. zqzq 25 27.04.15 09:30 Сейчас в теме
В конфигураторе же есть штатное средство "Все ограничения доступа", ровно для "Групповая замена/добавление ограничений доступа RLS".

Как я делал: Для одной роли прописал шаблон, допустим, МоиКонтрагенты(ИмяСсылки), далее проставил для нужных таблиц РЛС по шаблону, далее через "Все ограничения доступа" раскопировал шаблон и ограничения по другим ролям (даже если у роли нет права на чтение, РЛС всё равно добавлять можно).

PS Почитал, тут более продвинуто и автоматизировано. В плане отбора по реквизиту и объедининия ограничений.
3. cargobird 308 27.04.15 10:36 Сейчас в теме
(2) zqzq, спасибо за информацию, буду теперь знать и штатном средстве. Хотя да, для решаемой задачи нужен именно отбор по реквизиту со всеми связанными с ним ролями и метаданными.
4. artbear 1563 29.04.15 14:00 Сейчас в теме
Спасибоза разработку!
в работе над RLS очень много неавтоматизированной рутины. надеюсь, эта обработка часть рутины позволяет автоматизировать.
Посмотрю
ffgnebel; cargobird; +2 Ответить
5. victor_k 95 23.05.16 04:06 Сейчас в теме
Молодчина, хороший хелп!
cargobird; +1 Ответить
Оставьте свое сообщение