ПроверитьНазначениеРолей (БСП)

Автор: 1С
ОбщийМодуль.ПользователиСлужебный
БСП

Проверить назначение ролей. Проверяет корректность заполнения назначения ролей, а также корректность прав в ролях по назначению.

// Проверяет корректность заполнения назначения ролей, а также корректность прав в ролях по назначению.
Процедура ПроверитьНазначениеРолей(НазначениеРолей = Неопределено, ПроверитьВсе = Ложь, СписокОшибок = Неопределено) Экспорт
	
	Если НазначениеРолей = Неопределено Тогда
		НазначениеРолей = ПользователиСлужебныйПовтИсп.НазначениеРолей();
	КонецЕсли;
	
	ЗаголовокОшибки =
		НСтр("ru = 'Ошибка в процедуре ПриОпределенииНазначенияРолей общего модуля ПользователиПереопределяемый.'");
	
	ТекстОшибки = "";
	
	Назначение = Новый Структура;
	Для Каждого ОписаниеНазначенияРолей Из НазначениеРолей Цикл
		Роли = Новый Соответствие;
		Для Каждого КлючИЗначение Из ОписаниеНазначенияРолей.Значение Цикл
			Роль = Метаданные.Роли.Найти(КлючИЗначение.Ключ);
			Если Роль = Неопределено Тогда
				ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
						НСтр("ru = 'В метаданных не найдена роль ""%1"",
						           |указанная в назначении %2.'"),
						КлючИЗначение.Ключ, ОписаниеНазначенияРолей.Ключ);
				Если СписокОшибок = Неопределено Тогда
					ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки;
				Иначе
					СписокОшибок.Добавить(Неопределено, ОписаниеОшибки);
				КонецЕсли;
				Продолжить;
			КонецЕсли;
			Роли.Вставить(Роль, Истина);
			Для Каждого ОписаниеНазначения Из Назначение Цикл
				Если ОписаниеНазначения.Значение.Получить(Роль) = Неопределено Тогда
					Продолжить;
				КонецЕсли;
				ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
					НСтр("ru = 'Роль ""%1"" указана более чем в одном назначении:
					           |%2, %3.'"),
					Роль.Имя, ОписаниеНазначенияРолей.Ключ, ОписаниеНазначения.Ключ);
				Если СписокОшибок = Неопределено Тогда
					ТекстОшибки = ТекстОшибки + Символы.ПС + Символы.ПС + ОписаниеОшибки;
				Иначе
					СписокОшибок.Добавить(Роль, ОписаниеОшибки);
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
		Назначение.Вставить(ОписаниеНазначенияРолей.Ключ, Роли);
	КонецЦикла;
	
	// Проверка ролей внешних пользователей.
	НедоступныеПрава = Новый Массив;
	НедоступныеПрава.Добавить("Администрирование");
	НедоступныеПрава.Добавить("АдминистрированиеРасширенийКонфигурации");
	НедоступныеПрава.Добавить("ОбновлениеКонфигурацииБазыДанных");
	НедоступныеПрава.Добавить("АдминистрированиеДанных");
	
	ПроверитьСоставПравРолей(НедоступныеПрава, Назначение.ТолькоДляВнешнихПользователей, ТекстОшибки,
		НСтр("ru = 'При проверке ролей только для внешних пользователей найдены ошибки:'"), СписокОшибок);
	
	ПроверитьСоставПравРолей(НедоступныеПрава, Назначение.СовместноДляПользователейИВнешнихПользователей, ТекстОшибки,
		НСтр("ru = 'При проверке ролей совместно для пользователей и внешних пользователей найдены ошибки:'"), СписокОшибок);
	
	// Проверка ролей пользователей.
	Если ОбщегоНазначения.РазделениеВключено() Или ПроверитьВсе Тогда
		Роли = Новый Соответствие;
		Для Каждого Роль Из Метаданные.Роли Цикл
			Если Назначение.ТолькоДляАдминистраторовСистемы.Получить(Роль) <> Неопределено
			 Или Назначение.ТолькоДляПользователейСистемы.Получить(Роль) <> Неопределено Тогда
				Продолжить;
			КонецЕсли;
			Роли.Вставить(Роль, Истина);
		КонецЦикла;
		НедоступныеПрава = Новый Массив;
		НедоступныеПрава.Добавить("Администрирование");
		НедоступныеПрава.Добавить("АдминистрированиеРасширенийКонфигурации");
		НедоступныеПрава.Добавить("ОбновлениеКонфигурацииБазыДанных");
		НедоступныеПрава.Добавить("ТолстыйКлиент");
		НедоступныеПрава.Добавить("ВнешнееСоединение");
		НедоступныеПрава.Добавить("Automation");
		НедоступныеПрава.Добавить("ИнтерактивноеОткрытиеВнешнихОбработок");
		НедоступныеПрава.Добавить("ИнтерактивноеОткрытиеВнешнихОтчетов");
		НедоступныеПрава.Добавить("РежимВсеФункции");
		
		НеразделенныеДанные = НеразделенныеДанные();
		ПроверитьСоставПравРолей(НедоступныеПрава, Роли, ТекстОшибки,
			НСтр("ru = 'При проверке ролей для пользователей приложения найдены ошибки:'"), СписокОшибок, НеразделенныеДанные);
	КонецЕсли;
	Если Не ОбщегоНазначения.РазделениеВключено() Или ПроверитьВсе Тогда
		Роли = Новый Соответствие;
		Для Каждого Роль Из Метаданные.Роли Цикл
			Если Назначение.ТолькоДляАдминистраторовСистемы.Получить(Роль) <> Неопределено
			 Или Назначение.ТолькоДляВнешнихПользователей.Получить(Роль) <> Неопределено Тогда
				Продолжить;
			КонецЕсли;
			Роли.Вставить(Роль, Истина);
		КонецЦикла;
		НедоступныеПрава = Новый Массив;
		НедоступныеПрава.Добавить("Администрирование");
		НедоступныеПрава.Добавить("АдминистрированиеРасширенийКонфигурации");
		НедоступныеПрава.Добавить("ОбновлениеКонфигурацииБазыДанных");
		
		ПроверитьСоставПравРолей(НедоступныеПрава, Роли, ТекстОшибки,
			НСтр("ru = 'При проверке ролей для пользователей найдены ошибки:'"), СписокОшибок);
		
		ПроверитьСоставПравРолей(НедоступныеПрава, Назначение.СовместноДляПользователейИВнешнихПользователей, ТекстОшибки,
			НСтр("ru = 'При проверке ролей совместно для пользователей и внешних пользователей найдены ошибки:'"), СписокОшибок);
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ТекстОшибки) Тогда
		ВызватьИсключение ЗаголовокОшибки + ТекстОшибки;
	КонецЕсли;
	
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПроверитьНазначениеРолей (БСП)

НазначениеРолей (БСП)

ЕстьИсполнителиРоли (БСП)

ПриОпределенииНазначенияРолей (БСП)

НедоступныеРоли (БСП)

TurboConf ИР адаптер 1.43