Каталог решений - Этюды по программированию. Разграничение прав

Этюды по программированию. Разграничение прав

Этюды по программированию. Разграничение прав

В наличии

Задача: Имеется конфигурация на базе Библиотеки Стандартных Подсистем(БСП) -практически любая стандартная конфигурация 1С.
Есть, к примеры заказы покупателей. Есть группы менеджеров, каждая из которых должна иметь доступ только к заказам своей группы.

Категория:

Описание

Этюды по программированию. Разграничение прав.

Задача: Имеется конфигурация на базе Библиотеки Стандартных Подсистем(БСП) -практически любая стандартная конфигурация 1С.

Есть, к примеры заказы покупателей. Есть группы менеджеров, каждая из которых должна иметь доступ только к  заказам своей группы.

Если менеджеры могут видеть заказы только своей группы и не могут видеть заказы других групп, то задача решается штатными средствами совсем просто:

1. Включается "Ограничивать доступа на уровне записей".

2. Создаются группы доступа, каждая включает в себя членов соответствующей группы. В настройках группы указывается профиль доступа для менеджеров. В профиле группы на закладке "Ограничения доступа" указывается "Пользователи: Запрещены все, исключения в группах пользователей".

3. В Группах доступа для менеджеров прописываются исключения — пользователи только своей группы. Причем выбирается именно группа а не список пользователей, что бы было легче администрировать.

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

Первый способ:

Можно создать два профиля . Один с правом доступа на чтение, второй с правом доступа на изменение. В обоих профилях все пользователи запрещены, исключения в группах доступа. Создается группа доступа с профилем на чтение, которая включает всех менеджеров. И по группе доступа на каждую группу менеджеров с профилем на изменение и исключениями для членов своей группы. 

Второй способ, для тех, кто любит идти трудным путем:

Это добавить при открытии заказа строку:

	ЭтаФорма.ТолькоПросмотр= НЕ мо_ФИРМА_Привилегированный_Сервер.ЗаказКлиентаВозможностьРедактирования(Объект.Менеджер);

Соответственно нужно добавить в конфигурацию привелигелированный общий модуль с возможностью вызова сервера.

Модуль содержит следующую экспортную функцию:   

 

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

	КонецЕсли;
	Возврат Ложь;

КонецФункции

Обратите внимание, нужны заполненные группы доступа с профилями пользователей с названием "Менеджер по продажам ФИРМА". Надеюсь эта статья окажется Вам полезной.

P.S.: Надеюсь, вам понравится эта и другие мои статьи и разработки на //sale.itcity.ru/profile/48714/.

has been added to your cart:
Оформление заказа