Создаем полные права без администрирования в любой типовой

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

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

Копирую роль полные права в роль с идентификатором дор_ПолныеПрава и синонимом «Полные права без администрирования (доработанные)».

Эту роль добавляю в одноименный профиль и создаю группу доступа с этим единственным профилем. В эту группу добавляю нужных пользователей с полными правами, без администрирования.

Чтобы пользователи не имели права доступа к справочникам пользователей, групп и профилей доступа, дополнительных обработок, ограничиваю им доступ с помощью отдельного расширения «Полные права без администрирования».

В этом расширении в модуле перед записью отключаю запись защищаемых объектов:

Код защиты вида:

&Перед("ПередЗаписью")
Процедура ппба_ПередЗаписью(Отказ)
	ппба_Сервер.ПередЗаписью(ЭтотОбъект, Отказ);
КонецПроцедуры

Функции общих модулей такие:

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


//Модуль: ппба_СерверПовт
Функция ЕстьПравоАдминистрированияДоступаКБазе() Экспорт
	Возврат РольДоступна("ПолныеПрава");
КонецФункции

На этом можно было бы и ограничиться, но чтобы не путать пользователей, делаем дополнительно формы защищаемых объектов доступными только на просмотр при открытии (правда этот метод не вызывается у групп доступа и доп.обработок, но вызывается у профилей):

//Модуль: ПодключаемыеКомандыКлиент

&После("НачатьОбновлениеКоманд")
Процедура ппба_НачатьОбновлениеКоманд(Форма)    
	
	ИмяФормы = Форма.ИмяФормы;
	
	Если 
		ИмяФормы = "Справочник.Пользователи.Форма.ФормаЭлемента" ИЛИ
		ИмяФормы = "Справочник.ПрофилиГруппДоступа.Форма.ФормаЭлемента" ИЛИ
		ИмяФормы = "Справочник.ГруппыДоступа.Форма.ФормаЭлемента" ИЛИ
		ИмяФормы = "Справочник.ДополнительныеОтчетыИОбработки.Форма.ФормаЭлемента" Тогда
		Если НЕ ппба_СерверПовт.ЕстьПравоАдминистрированияДоступаКБазе() Тогда
			Форма.ТолькоПросмотр = истина;
		КонецЕсли;
	КонецЕсли;
		
КонецПроцедуры

Сначала я думал, что права на администрирование можно отключить расширением, но увы, это право не отключается.

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

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

Правда при открытии справочника пользователей возникает ошибка, т.к. у пользователя нет прав на чтение пользователей базы (я не стал экранировать эту ошибку):

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

Среда: УНФ 1.6.27.167. Объем: 1.5 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован.