новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума

Права доступа в УПП. Дополнительные права

  • Добавить свою публикацию
  • для этого требуется регистрация

Предисловие

Механизм дополнительных прав пользователей позволяет выполнять разграничение доступа на объекты конфигурации очень гибко, а его настройка выполняется достаточно просто в пользовательском режиме в отличии от ролей. Рассмотрим основные моменты работы с дополнительными правами в пользовательском режиме, а также реализацию механизма в конфигураторе.

Режим 1С:Предприятие

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

Изображение

Список дополнительных прав формируется на основе элементов плана видов характеристик "ПраваПользователей", в котором устанавливается тип значений настройки прав (в большинстве случаев "Булево"). Обычно в типовых конфигурациях уже имеется набор предопределенных элементов дополнительных прав. Дополнительные права можно добавлять в режиме 1С:Предприятие.

Изображение

Каждое дополнительное право ограничивает доступ на определенные действия, о которых можно догадаться либо по названию доп. права, либо в документации к конфигурации.

Режим конфигуратора

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

Изображение

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

Получить значение права можно с помощью запроса к регистру сведений. Вот так выглядит код типовой функции для проверки прав:

// Функция возвращает значение дополнительного права профиля пользователя
//
// Параметры:
// Право - право, наличие которого проверяется (Тип ПВХ.ПраваПользователей)
// ЗначениеПоУмолчанию - значение по умолчанию для передаваемого права (возвращается в случае
// отсутствия значений в регистре сведений). Тип - булево
//
// Возвращаемое значение: массив значений права
//
Функция ПолучитьЗначениеПраваПользователя(Право, ЗначениеПоУмолчанию) Экспорт
	
	КэшДополнительныхПрав = глЗначениеПеременной("ЗначенияДополнительныхПравПользователя");
	
	МассивЗначенийПрава = КэшДополнительныхПрав[Право];
	
	Если МассивЗначенийПрава = Неопределено Тогда
		МассивЗначенийПрава = Новый Массив;
		
		Если РольДоступна("ПолныеПрава") Тогда
			ЗначениеПрава = ПолучитьЗначениеРазрешенногоПрава(Право);
			МассивЗначенийПрава.Добавить(ЗначениеПрава);
		Иначе
			ОбъектПрав = глЗначениеПеременной("ПрофильПолномочийПользователя");
			Если ЗначениеЗаполнено(ОбъектПрав) Тогда
				Запрос = Новый Запрос;
				
				Запрос.УстановитьПараметр("ОбъектПрав", ОбъектПрав);
				Запрос.УстановитьПараметр("ПравоПользователя",   Право);
				
				Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
				|	РегистрЗначениеПрав.Значение КАК Значение
				|ИЗ
				|	РегистрСведений.ЗначенияДополнительныхПравПользователя КАК РегистрЗначениеПрав
				|ГДЕ
				|	РегистрЗначениеПрав.Право = &ПравоПользователя
				|	И РегистрЗначениеПрав.Пользователь = &ОбъектПрав";
				
				Выборка = Запрос.Выполнить().Выбрать();
				
				Если Выборка.Следующий() Тогда
					ЗначениеПрава = Выборка.Значение;
				Иначе
					ЗначениеПрава = ЗначениеПоУмолчанию;
				КонецЕсли;
				МассивЗначенийПрава.Добавить(ЗначениеПрава);
			Иначе
				ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");	
				МассивЗначенийПрава = ПрочитатьЗначениеПраваПользователя(Право, ЗначениеПоУмолчанию, 
                                                                         ТекущийПользователь);
			КонецЕсли;
		КонецЕсли; 
		
		КэшДополнительныхПрав[Право] = МассивЗначенийПрава;
		
		#Если Сервер Тогда
			глЗначениеПеременнойУстановить("ЗначенияДополнительныхПравПользователя", 
                                            КэшДополнительныхПрав, Истина);
		#КонецЕсли
	КонецЕсли;
	
	Возврат МассивЗначенийПрава;
	
КонецФункции

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

 
0
Читайте также
Обслуживание программы 1с
Копмлекс услуг по настройке и сопровождению 1С программ представляет собой обслуживание 1С
Настройка отказоустойчивой системы
"Отказоустойчивая система, настройка настройка MS SQL"
Права доступа на реквизиты
"Особенности использования механизма настройки прав доступа для реквизитов"
Разработки
Пользователи, права и интерфейсы
Обработка помогает в определении какие права и нтерфейсы дать пользователям
Доступ к реквизитам справочника в 1с7.7 для каждого пользователя
Разработка разграничивает доступ к реквизитам справочника в 1С 7.7
Еще от автора
≡ к списку статей