Новый вид доступа в УТ 11. Как в УТ 11 изменить константу "ПараметрыОграниченияДоступа"

16.12.15

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

В УТ11 существуют стандартные виды ограничения прав доступа. Например: "Подразделения", "Склады", "Кассы", "ВидыЦен" и т.д.
До поры до времени такой набор стандартных видов ограничений устраивает пользователей.
Но что делать, если возникла необходимость добавить новый вид доступа?
Об этом и пойдет речь в данной статье.

Итак, у нас есть задача добавить новый вид доступа в конфигурации УТ 11.

В старых версиях УТ 11 виды доступа задавались в плане видов характеристик "ВидыДоступа".

В новых версиях этот ПВХ уже не задействован. Вместо него используется определяемый тип "ЗначениеДоступа".

Первое, что приходит на ум - добавить новый предопределенный элемент в ПВХ "ВидыДоступа" или включить нужный тип в определяемый тип "ЗначениеДоступа".

Делаем это. Перезапускаем программу, заходим в раздел "Администрирование", "Настройки пользователей и прав", "Профили групп доступа", открываем какой либо профиль, переходим на закладку "Ограничения доступа", добавляем новую строчку и ...

В списке выбора видов доступа мы не находим наш добавленный новый вид доступа.

Что же нужно сделать для того, чтобы он появился?

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

Для старых версий УТ11 и для новых порядок действий несколько отличается.

Для старых версий:

Этот вариант предложил Замятин Илья. Орфография автора сохранена.

1. Из модуля менеджера ПлановВидовХарактеристик запускается процедура

Процедура ОбновитьОписаниеСвойств(ЕстьИзменения = Неопределено) Экспорт

она вызывает в свою очередь

Функция СвойстваВидовДоступа()

которая вызывает

СтандартныеПодсистемыПереопределяемый.ЗаполнитьСвойстваВидаДоступа(Свойства)

И вот эта процедура делает то, что нам нужно, т.е. заполняет параметры для нашей мега константы. Например я добавляю новый параметр отбора ЦФО, соответственно я вставляю вот такой код:

ИначеЕсли Свойства.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ЦФО Тогда

        Свойства.Таблицы.Добавить("Справочник.Подразделения");
        Свойства.ВидДоступаБезГруппЗначенияДоступа            = Истина;
        Свойства.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = Истина;

Где значения ЦФО живут в справочнике Подразделения. Ну вот, как-то так.


Для новых версий:

1. Внести изменения в общий модуль "УправлениеДоступомПереопределяемый":

Процедура ПриЗаполненииВидовДоступа(ВидыДоступа) Экспорт
	
        ...
	
	//+	Насыров
	ВидДоступа = ВидыДоступа.Добавить();
	ВидДоступа.Имя = "ВидыКартЛояльности";
	ВидДоступа.Представление    = НСтр("ru = 'Виды карт лояльности'");
	ВидДоступа.ТипЗначений      = Тип("СправочникСсылка.ВидыКартЛояльности");
	//-Насыров
	
КонецПроцедуры
Процедура ПриЗаполненииИспользованияВидаДоступа(ВидДоступа, Использование) Экспорт
	
	Если ВидДоступа = "ГруппыНоменклатуры" Тогда
		
		Использование = Константы.ИспользоватьГруппыДоступаНоменклатуры.Получить();
		
        ...
	
	ИначеЕсли ВидДоступа = "ХозяйственныеОперации" Тогда
		
		Использование = Истина;
		
	//+ Насыров
	ИначеЕсли ВидДоступа = "ВидыКартЛояльности" Тогда
		
		Использование = Истина;
	//- Насыров
		
	КонецЕсли;
	
КонецПроцедуры

2. Обновить содержимое константы "ПараметрыОграниченияДоступа"

Это можно сделать например внешней обработкой, в форме которой вызывается код:

Константы.ПараметрыОграниченияДоступа.СоздатьМенеджерЗначения(
				).ОбновитьОписаниеСвойствВидовДоступа();

Итак, новый вид доступа добавлен. Теперь мы можем использовать его при настройке доступа к данным на уровне записей таблиц базы данных (RLS).

О том как это сделать подробно рассказано в следующей статье:

Использование подсистемы "Управление доступом" из состава БСП версии 2.2+

Но иногда бывают случаи когда нам не нужно ограничивать доступ на уровне записей по созданному нами виду доступа.

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

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

Т.е. перед тем как кассир начнет выбирать вид карты, мы должны определить какие виды карт он может использовать.

Мы должны получить список видов карт аналогичный списку при настроенном RLS на право "Чтение" при использовании шаблона ограничений #ПоЗначениям().

Если вы откроете текст этого шаблона, то увидите порядка 3000 строк кода, в которых не так то просто разобраться.

Что же делать? Предлагаю использовать следующую функцию:

// Функция возвращает массив доступных элементов справочника, к данным которых
// у текущего пользователя разрешено требуемое право доступа по RLS.
//
// Порядок использования функции можно использовать, если требуется выполнять запросы 
// в привилегированном режиме, но чтобы при этом учитывались настройки доступа по RLS:
// 1. с помощью текущей функции определяется список доступных элементов справочника.
// 2. в текстах запросов к самим данных (регистрам, документам) 
// устанавливаются отборы по этим элементам справочника
// 3. перед выполнением запроса к данным включается привилегированный режим.
//
// Параметры:
// ПравоНаИзменение - Булево
// - Истина - если после выполнения запроса данные предполагается менять
// и нужно проверить, что у пользователя есть право на изменение;
// - Ложь - если данные только отображаются пользователю на чтение,
// и нужно проверить что у него есть соответствующее право.
// 
Функция ВсеЭлементыСправочникаДанныеКоторыхДоступныПоRLS(ТипПроверяемыхЗначений, ПравоНаИзменение=Ложь) Экспорт

Если ТипЗнч(ТипПроверяемыхЗначений) = Тип("Тип") Тогда
ИмяТаблицы = Метаданные.НайтиПоТипу(ТипПроверяемыхЗначений).Имя;
Иначе 
ИмяТаблицы = Метаданные.НайтиПоТипу(ТипЗнч(ТипПроверяемыхЗначений)).Имя;
КонецЕсли; 

Запрос = Новый Запрос;

Если Пользователи.ЭтоПолноправныйПользователь()
ИЛИ НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда

// Ограничений по RLS нет, возвращаем все элементы из справочника

Запрос.Текст = 
"ВЫБРАТЬ
| $ИмяТаблицы$.Ссылка
|ИЗ
| Справочник.$ИмяТаблицы$ КАК $ИмяТаблицы$";

Иначе

// Запрос взят из шаблона #ПоЗначениям роли ДобавлениеИзменениеДанныхБухгалтерии
// с теми параметрами, с которыми он применяется для регистра бухгалтерии Хозрасчетный.
Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь());
Запрос.УстановитьПараметр("Изменение", ПравоНаИзменение);

Запрос.УстановитьПараметр("ИмяРегистра", "Справочник."+ИмяТаблицы);

ТекстЗапроса =
"ВЫБРАТЬ
| $ИмяТаблицы$.Ссылка
|ИЗ
| Справочник.$ИмяТаблицы$ КАК $ИмяТаблицы$
|ГДЕ
| ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| Справочник.ИдентификаторыОбъектовМетаданных КАК СвойстваТекущейТаблицы
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
| ПО
| СвойстваТекущейТаблицы.ПолноеИмя = &ИмяРегистра
| И ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа
| ГДЕ
| ТаблицыГруппДоступа.Таблица = СвойстваТекущейТаблицы.Ссылка
| И ТаблицыГруппДоступа.ГруппаДоступа = ГруппыДоступа.Ссылка
| И ТаблицыГруппДоступа.Изменение = &Изменение)
| И ГруппыДоступа.Ссылка В
| (ВЫБРАТЬ
| ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
| ИЗ
| Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
| ПО
| СоставыГруппПользователей.Пользователь = &Пользователь
| И СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь)
| ГДЕ
| ВЫБОР
| КОГДА ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ЗначенияГруппДоступа КАК Значения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначений
| ПО
| Значения.ГруппаДоступа = ГруппыДоступа.Ссылка
| И Значения.ЗначениеДоступа = $ИмяТаблицы$.Ссылка
| И ГруппыЗначений.ЗначениеДоступа = ГруппыЗначений.ГруппаЗначенийДоступа)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ = ВЫБОР
| КОГДА ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ЗначенияГруппДоступаПоУмолчанию КАК ЗначенияПоУмолчанию
| ГДЕ
| ЗначенияПоУмолчанию.ГруппаДоступа = ГруппыДоступа.Ссылка
| И ТИПЗНАЧЕНИЯ(ЗначенияПоУмолчанию.ТипЗначенийДоступа) = ТИПЗНАЧЕНИЯ($ИмяТаблицы$.Ссылка)
| И ЗначенияПоУмолчанию.ВсеРазрешены = ЛОЖЬ)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ)";

Запрос.Текст = ?(ПравоНаИзменение,
ТекстЗапроса,
СтрЗаменить(ТекстЗапроса, "И ТаблицыГруппДоступа.Изменение = &Изменение", ""));

КонецЕсли;

Запрос.Текст = СтрЗаменить(Запрос.Текст, "$ИмяТаблицы$", ИмяТаблицы);

// Доступ к настройкам RLS выполняется в привилегированном режиме.
УстановитьПривилегированныйРежим(Истина);

Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");

КонецФункции

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

Эта функция вернет нам список доступных элементов справочника согласно настройкам заданным в справочниках ГруппыДоступа или ПрофилиГруппДоступа.

Ну вот, собственно, и все.

Граничение прав доступа виды доступа

См. также

AUTO VPN (portable)

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

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

1200 руб.

24.03.2020    14400    22    32    

33

Настройка аутентификации в 1С с использованием стандарта RFC 7519 (JWT)

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

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

27.02.2024    2612    PROSTO-1C    9    

29

Device flow аутентификация, или туда и обратно

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

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

1 стартмани

27.10.2023    1619    platonov.e    1    

23

Анализатор безопасности базы сервера 1С

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

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

5 стартмани

24.04.2023    5439    14    soulner    7    

29

Двухфакторная аутентификация в 1С через Telegram и Email

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

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

2 стартмани

08.12.2022    5969    32    Silenser    12    

23

История одного взлома или проверьте вашу систему на безопасность

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

От клиента клиенту, от одной системы к другой, мы вновь и вновь встречаем одни и те же проблемы и дыры в безопасности. На конференции Infostart Event 2021 Post-Apocalypse Виталий Онянов рассказал о базовых принципах безопасности информационных систем и представил чек-лист, с помощью которого вы сможете проверить свою систему на уязвимость.

26.10.2022    9247    Tavalik    46    

113
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. nixel 1404 23.12.15 10:48 Сейчас в теме
Т.е. сразу открыть документацию по БСП в голову не пришло?
2. Vovan58 65 23.12.15 12:55 Сейчас в теме
А по проще - через справочник "Профили групп доступа" ? и потом запустить обработку ИнструментыРазработчикаОбновлениеВспомогательныхДанных ?
3. Spacer 355 23.12.15 15:00 Сейчас в теме
(2) Vovan58, вы сможете просто так, ничего не меняя в конфигурации, добавить новый вид доступа в справочник "Профили групп доступа"?
Тогда вы просто волшебник.:)
4. Vovan58 65 23.12.15 16:38 Сейчас в теме
Да, он не будет предопределенным. В УНФ у меня это получалось :)
Проверил в УТ 11.1 только что - тоже.
5. knopnarix 12.04.18 01:48 Сейчас в теме
Все понятно. Купи 1с УТ 11 КОРП за большие бабки, чтобы это гуано не тупило уже на 3-х пользователях с номенклатурой 300 единиц купи сервер 1с и поставь хотя-бы на постгрес, забей на разделы в правах типа "Добавление и редактирование ....", и рядом "Добавление редактирование", что не облегчает поиск, меняется подход к решению в общем типовой для торговых предприятий задачи. Так еще и на типа 1с-ном форуме, где сидят дико умные программисты, никто конфу не знает и ничего толком предложить по настройкам не может. Все только впаривают свои кривые внешние обработки, педлагают допилить базу в разных местах, а потом все выбрасывается и рекомендуется купить новую конфу. На каком основании вобще тогда такой "продукт автоматизации" покупают? Еще и за подписку платят, чтобы обнвления кривые ставить. Есть галочки ограничения на уровне записей и на уровне партнеров. А есть очевидная задача для любого комммерческого предприятия назначить менеджеру по продажам видеть только свои документы. Иногда менеджер должен видеть только тех клиентов, которых ему выделили в обслуживание или тех, которых он сам наработал. Вот и как этого добиться, не снимая конфу с поддержки? Почему в редакторе пользователя нельзя установить, правила доступа в виде 2-х доп. таблиц: видетьдокументы пользователей, видеть группы партнеров/контрагентов/клиентов. Или я таколй дурак и не могу это найти уже 2 неделди?? Почему 1с выпускает такие типовые конфигурации, которые, чтобызаработали как надо, нужно допиливать при помощи напильника и такой-то матери? И вот читаю форум (не конкретно эту тему) - куча спецов, дающих абстрактные ответы при наличии адекватных решений, если пол часа посидеть в настройках. Прошу отозваться участников форума реально владеющих конфигурацией. В противном случае вообще не знаю зачем я здесь зарегался. Спасибо.
san4o; ntx; +2 Ответить
6. knopnarix 12.04.18 01:59 Сейчас в теме
Я вообще не понимаю фетиша допиливать типовые конфигурации после уплаты их полной стоимости. Если ты используешь свою конфу полность самописную - ты должен купить хоть какуюто. Я готов купить платформу и пользовательские ключи на запуск своей базы, а не конфу, которая мне не нужна. И вообще, если из коробки ее нельзя нормально настроить, зачем нужна такая программа автоматизации. У меня бомбит от 1с - тут нельзя делать элементарные вещи простым способом - нужно *ться, а не работать. От нафик, к примеру, типовую обработку обмена обновляют от конфы к конфе? Так много документов существуют: заказ, счет, сч-ф акт, накладная, упд (которая по суты сч.ф+накладная+доп. параметр).
7. knopnarix 12.04.18 02:11 Сейчас в теме
Итак, у меня побомбило и я готов поделиться решением. Не претендую на уникальность, если я идиот, прошу меня об этом аргументированно уведомить. Стремился решить задачу без участия конфигуратора даже для настройки прав (помня некоторые неприятные особенности со старых 8.2 при настройке прав пользователей из конфигуратора)
Задача: Менеджер отдела продаж должен видеть только свои документы. Менеджер отдела продаж должен видеть только своих партнеров (или тех, которых ему в работу передало руководство)
Граничные условия: УТ 11.4 типовая. В конфигуратор лезть запрещено под страхом отрубания головы.
Решение: 1. Администрирование/настройки пользователей и прав ставим галки: Ограничивать доступ на уровне записей, группы доступа партнеров
2. Собираем свои группы доступа на основе зашитых шаблонов профилей доступа.
3. Создаем список групп доступа партнеров (я их именовалменеджерами, колхоз, но большего не придумал)
4. Тут вилка. Либо для каждого менеджера кохозим свою персональную VIP группу, где прописываем в ограничениях пользователя и группы партнеров, либо колхозим типовую группу для менеджеров и добавляем каждому персональную группку с ограничениями. В исключениях ставим, соотвтвенно самого себяшенького менеджера, для которого делаются ограниччения, а также накидывается список из групп доступа по партнерам.
8. knopnarix 12.04.18 02:14 Сейчас в теме
Добавлю: Когдасоздаете/редактируете партнера после этих настроек - появляется поле ввода группы доступа партнера - выбираем изсписка и сохраняем, чтобы конкретный партнер для конкретной группы заработал
9. agaraev 21.06.18 16:21 Сейчас в теме
Спасибо за статью! Потребовалось добавить ограничения в "Комплексная автоматизация 2" по справочнику "Направление деятельности". Пытался сам найти что и куда дописать, но так и не нашел, а со статьей все получилось.

Только есть небольшое замечание по п. 2 для новых версий: константы "ПараметрыОграниченияДоступа" в новых версиях БСП нет. Для обновления описания свойств видов доступа в обработке нужно писать следующий код:
УправлениеДоступомСлужебный.ОбновитьОписаниеСвойствВидовДоступа()
dablack; join2us; jamirza; +3 Ответить
12. qux 25 12.09.21 21:54 Сейчас в теме
(9) Настраиваю на УТ 11.4.11.55. Выполняю код УправлениеДоступомСлужебный.ОбновитьОписаниеСвойствВидовДоступа() и ловлю ошибку:

По данным, полученным из процедуры ПриЗаполненииВидовДоступа
общего модуля УправлениеДоступомПереопределяемый,
в определяемом типе "Значение доступа объект" не указаны требуемые типы:
- Документ объект: Реализация товаров и услуг,
- Документ объект: Заказ клиента


Указываю нужные мне типы в определяемый тип "Значение доступа объект" и при обновлении конфигурации ловлю следующую ошибку:

ПодпискаНаСобытие.ОбновитьГруппыЗначенийДоступа: Имя события недопустимо для указанного источника события
При проверке метаданных обнаружены ошибки!
Операция не может быть выполнена.
10. join2us 15 09.10.19 13:22 Сейчас в теме
УНФ 1.6
прошло как по маслу, спасибо.
11. AndKovalchuk 188 02.03.21 09:13 Сейчас в теме
Попробовал в БП3.0.88.22 добавить в определяемый тип "ЗначенияДоступа" - ПланСчетовСсылка.Хозрасчетый

Потом изменил как описано две процедуры, обновил константу через внешнюю обработку, но нового вида доступа так и не появилось. Может подскажете, где копать?
13. user1495530 27.04.23 15:23 Сейчас в теме
(11) Если создать новый профиль групп доступа, то должен появится
Оставьте свое сообщение