И так, нам нужно добавить в систему права доступа на ТОЛЬКО ПРОСМОТР информации без прав на редактирование, изменение.
Использовать стандартный функционал не представляется возможным, поскольку та же роль "Пользователь" в УПП имеет права на изменение некоторых справочников. К тому же, нужно создать права, не зависящие от дополнительных прав пользователя и достаточно простые в настройки (чтобы достаточно было поставить одну галочку).
Решение само по себе достаточно простое с несколькими нюансами. Добавим в конфигурацию новую роль "DEV_ТолькоПросмотр". В ней для каждого объекта метаданных конфигурации установим права на чтение и просмотр, получение.
Для удобства дальней разработки и последующей настройки прав для новых объектов, установим опцию "Устанавливать права для новых объектов".
Уже сейчас, добавив эту роль пользователю, мы откроем ему доступ на чтение/просмотр большинства таблиц базы данных. Однако, типовой механизм не позволяет работать в системе, если пользователю не присвоена типовая роль "Пользователь". Исправим это. В модуле обычного приложения в обработчике события "ПередНачаломРаботыСистемы" исправим проверку на доступную роль "Пользователь":
// Перед началом работы системы // Процедура ПередНачаломРаботыСистемы(Отказ) Если НЕ РольДоступна("Пользователь") И (НЕ РольДоступна("ПолныеПрава")) // !!! Разрешаем запуск для роли "DEV_ТолькоПросмотр" !!! И НЕ РольДоступна("DEV_ТолькоПросмотр") Тогда Предупреждение("Вам не назначена роль ""Пользователь"". Запуск конфигурации невозможен."); Отказ = Истина; Возврат; КонецЕсли; Отказ = НЕ УправлениеПользователями.ПользовательОпределен(); // ОбновлениеВерсииИБ Отказ = Отказ ИЛИ НЕ ОбновлениеИнформационнойБазыКлиент.ВозможноВыполнитьОбновлениеИнформационнойБазы(); // Конец ОбновлениеВерсииИБ КонецПроцедуры
Для правильной работы конфигурации также добавим измененим условие экспортной функции "ПользователюРазрешенЗапускКонфигурации" из общего модуля "УправлениеПользователямиСервер":
Функция ПользователюРазрешенЗапускКонфигурации() Экспорт Если НЕ РольДоступна("Пользователь") И (НЕ РольДоступна("ПолныеПрава")) // !!! Разрешаем запуск для роли "DEV_ТолькоПросмотр" !!! И (НЕ РольДоступна("DEV_ТолькоПросмотр")) Тогда Возврат Ложь; КонецЕсли; Возврат Истина; КонецФункции //
Последний шаг, который нужно сделать - это автоматически очищать доступные роли пользователя информационной базы, если у него установлена роль "DEV_ТолькоПросмотр". После очистки оставлять только эту роль. Напомню, что по умолчанию система всегда добавляет роль "Пользователь" в состав доступных ролей.
Очистку состава ролей будем выполнять перед записью элемента справочника "Пользователи". Вот программный код обработчика перед записью справочника:
Процедура DEV_ПередЗаписьюПользователяПередЗаписью(Источник, Отказ) Экспорт ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Источник.ИдентификаторПользователяИБ); Если ПользовательИБ <> Неопределено Тогда Роли = ПользовательИБ.Роли; Если Роли.Содержит(Метаданные.Роли.DEV_ТолькоПросмотр) Тогда Роли.Очистить(); Роли.Добавить(Метаданные.Роли.DEV_ТолькоПросмотр); КонецЕсли; ПользовательИБ.Записать(); КонецЕсли; КонецПроцедуры
Не забудьте добавить в роли "DEV_ТолькоПросмотр" права на запуск программы в режиме толстоко клиента, тонкого клиента и веб-клиента, иначе пользователь просто не сможет запустить программу. По необходимости установите другие права доступа.
После присваивания созданной роли пользователю, он сможет просматривать любую информацию в информационной базе.
Изменить какую-либо запись справочника или отменить проведение документа пользователь не сможет.