Создаем полные права без администрирования в любой типовой
В типовых 1С, к сожалению, полные права позволяют администрирование базы (выгрузку, отладку) и изменение прав пользователей. Хотя часто хотелось бы дать пользователю полные права на манипуляцию данными, но без администрирования.
Поэтому описываю технологию, как я создаю полные права без администрирования.
Копирую роль полные права в роль с идентификатором дор_ПолныеПрава и синонимом «Полные права без администрирования (доработанные)».
Эту роль добавляю в одноименный профиль и создаю группу доступа с этим единственным профилем. В эту группу добавляю нужных пользователей с полными правами, без администрирования.
Чтобы пользователи не имели права доступа к справочникам пользователей, групп и профилей доступа, дополнительных обработок, ограничиваю им доступ с помощью отдельного расширения «Полные права без администрирования».
В этом расширении в модуле перед записью отключаю запись защищаемых объектов:
Код защиты вида:
&Перед("ПередЗаписью") Процедура ппба_ПередЗаписью(Отказ) ппба_Сервер.ПередЗаписью(ЭтотОбъект, Отказ); КонецПроцедуры
Функции общих модулей такие:
//Модуль: ппба_Сервер Процедура ПередЗаписью(Источник, Отказ) Экспорт Если НЕ ппба_СерверПовт.ЕстьПравоАдминистрированияДоступаКБазе() Тогда Отказ = истина; Сообщить("Для этой операции требуются права администрирования!"); КонецЕсли; КонецПроцедуры //Модуль: ппба_СерверПовт Функция ЕстьПравоАдминистрированияДоступаКБазе() Экспорт Возврат РольДоступна("ПолныеПрава"); КонецФункции
На этом можно было бы и ограничиться, но чтобы не путать пользователей, делаем дополнительно формы защищаемых объектов доступными только на просмотр при открытии (правда этот метод не вызывается у групп доступа и доп.обработок, но вызывается у профилей):
//Модуль: ПодключаемыеКомандыКлиент &После("НачатьОбновлениеКоманд") Процедура ппба_НачатьОбновлениеКоманд(Форма) ИмяФормы = Форма.ИмяФормы; Если ИмяФормы = "Справочник.Пользователи.Форма.ФормаЭлемента" ИЛИ ИмяФормы = "Справочник.ПрофилиГруппДоступа.Форма.ФормаЭлемента" ИЛИ ИмяФормы = "Справочник.ГруппыДоступа.Форма.ФормаЭлемента" ИЛИ ИмяФормы = "Справочник.ДополнительныеОтчетыИОбработки.Форма.ФормаЭлемента" Тогда Если НЕ ппба_СерверПовт.ЕстьПравоАдминистрированияДоступаКБазе() Тогда Форма.ТолькоПросмотр = истина; КонецЕсли; КонецЕсли; КонецПроцедуры
Сначала я думал, что права на администрирование можно отключить расширением, но увы, это право не отключается.
Так что при обновлении, если у таких пользователей будут права, нужно будет заново копировать роль полные права.
В некоторых участках программы, например, при обмене с сайтом проверяется наличие именно полных прав (по идентификатору ПолныеПрава), так что придется эту логику переопределять тоже через расширение, но это несложно.
Правда при открытии справочника пользователей возникает ошибка, т.к. у пользователя нет прав на чтение пользователей базы (я не стал экранировать эту ошибку):
Т.е. по большому счету можно просто отключить право администирования, все равно пользователь не сможет поменять список ролей пользователя, но нужно обязательно перекрыть право к дополнительным отчетам и обработкам.
Среда: УНФ 1.6.27.167. Объем: 1.5 час.
Свежие комментарии