1. XelOla 16 10.07.18 15:19 Сейчас в теме

Ограничение ДинамическогоСписка по Роли

Здравствуйте!
помогите пожалуйста, ограничить форму списка документа с динамическим списком по Не РольДоступна("Руководитель") если ВидОперации = ВыплатаЗП.
Ответы
Избранное Подписка Сортировка: Древо
2. Doreng 10 10.07.18 15:26 Сейчас в теме
(1)А как насчет "ВЫБРАТЬ РАЗРЕШЕННЫЕ" в запросе?
Извиняюсь...15-й раз прочитал, похоже это Вам не подойдет :-) стало доходить...что Вам нужен отбор динамического списка?
Я делал так
&НаКлиенте
Процедура ПриОткрытии(Отказ)

	УстановитьОтборПоОтветственному()	

КонецПроцедуры

&НаСервере
Процедура УстановитьОтборПоОтветственному()
Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ПользователиИнформационнойБазы.ТекущийПользователь().ПолноеИмя);
ОтветственныйДляОтображения = Справочники.Сотрудники.НайтиПоНаименованию(Пользователь.ПолноеНаименование());
УстановитьМеткуИОтборСписка("Ответственный", "Менеджеры", ОтветственныйДляОтображения);
КонецПроцедуры
Показать

А может Вам нужно так....(видимо я плохо понимаю слово "ограничить")
&НаКлиенте
Процедура ПриОткрытии(Отказ)

Если РольДоступна("ПолныеПрава") Тогда
Отказ = Истина;
КонецЕсли	

КонецПроцедуры
Показать
3. XelOla 16 10.07.18 15:45 Сейчас в теме
(2) в самом динамическом списке надо чтото менять?
т.е. фактически он у меня сейчас без условия, надо ли добавлять?
ВЫБРАТЬ
	ДокументУП_ДокументДДС.Ссылка,
	ДокументУП_ДокументДДС.ПометкаУдаления,
	ДокументУП_ДокументДДС.Номер,
	ДокументУП_ДокументДДС.Дата,
	ДокументУП_ДокументДДС.Проведен

ИЗ
	Документ.УП_ДокументДДС КАК ДокументУП_ДокументДДС
Показать
10. Doreng 10 10.07.18 15:59 Сейчас в теме
(3)имея такие исходные могу предложить только

ПодставимОтбор = "";
Если Не РольДоступна("Руководитель") Тогда
ПодставимОтбор  = "|ГДЕ
|  ДокументУП_ДокументДДС.ВидОперации = &ВыплатаЗП" 
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = ВЫБРАТЬ
    ДокументУП_ДокументДДС.Ссылка,
    ДокументУП_ДокументДДС.ПометкаУдаления,
    ДокументУП_ДокументДДС.Номер,
    ДокументУП_ДокументДДС.Дата,
    ДокументУП_ДокументДДС.Проведен

ИЗ
    Документ.УП_ДокументДДС КАК ДокументУП_ДокументДДС
+ ПодставимОтбор  
Показать

как то так склепал из того что было 6-)
осталось определить параметр
Vitaly1C8; +1 Ответить
20. XelOla 16 10.07.18 16:41 Сейчас в теме
(10)
простите, есть вопрос
чтото никогда не пользовалась
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если НЕ РольДоступна("УП_Руководитель") Тогда
Список.Параметры.УстановитьЗначениеПараметра("ВидОперации", Перечисления.ВидыОперацийДДС.ВыплатаСотрудникам);
Список.Параметры.УстановитьЗначениеПараметра("РасчСч",*здесь надо задать в целом справочник расчетные счета, т.к. Значение параметра РасчСч - составной тип данных, и там есть еще справочник Касса, т.е. параметром РасчСч надо задать - видеть ТоЛЬКО расчетные счета, НЕ Кассу*);
КонецЕсли;
КонецПроцедуры
7. XelOla 16 10.07.18 15:53 Сейчас в теме
(2)
а что "Выбрать разрешенные" можно сделать на одно перечисление?
а кстати, так не пойдет, потому что к перечислению ВидыОперацийДДС.ВыплатаСотрудникам - имеет доступ типа все, как администраторы с полными правами, вообщем менять права пользователй крайне не желательно, но есть группа пользователей без Роли Руководитель, вот им нельзя смотреть документ ДокументУП_ДокументДДС с видом операции ВыплатаСотрудникам
22. Vitaly1C8 11.07.18 09:40 Сейчас в теме
(1) Из опыта скажу, что лучше проверять не Роль а Профиль; Потому что Профиль легко можно настроить из программы (не нужен конфигуратор)
Пример из Документооборота:


// Обработчик подписки ДокументооборотПраваДоступаПриЗаписиФайла
Процедура ДокументооборотПраваДоступаПриЗаписиФайла(Источник, Отказ) Экспорт
	
	// Проверка права добавления
	Если Не ПривилегированныйРежим() И Не РольДоступна("ПолныеПрава") Тогда
		
		// В.Ч.
		ЕстьРольДляДоступа = вчПрава.ЕстьПрофиль("Делопроизводители");
		Если НЕ ЕстьРольДляДоступа Тогда
		
			Если Источник.ДополнительныеСвойства.Свойство("ЭтоНовый")
				И Источник.ДополнительныеСвойства.ЭтоНовый Тогда
				
				Права = ПолучитьПраваПоОбъекту(Источник.Ссылка);
				Если Не Права.Добавление Тогда
					ВызватьИсключение НСтр("ru = 'Недостаточно прав для выполнения операции.
						|Обратитесь к администратору.'");
				КонецЕсли;
				
			КонецЕсли;
		
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры	

Показать



// Общие модули - вчПрава

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

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

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

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

Показать
4. herfis 270 10.07.18 15:48 Сейчас в теме
Прямой путь ограничения динамического списка по роли - это RLS :)
6. user633533_encantado 2 10.07.18 15:53 Сейчас в теме
RLS и не на роль руководителя, а на хозяйственную операцию.
5. herfis 270 10.07.18 15:52 Сейчас в теме
Всем "рядовым" сотрудникам выдается роль с доступом на документ, где в RLS прописано условие на вид операции.
А в роли "Руководитель" доступ на документ без ограничений. И все. Ничего программировать не надо.
И отчеты, получающие список документов, тоже будут автоматически фильтровать данные (только нужно добавлять ключевое слово РАЗРЕШЕННЫЕ к ВЫБРАТЬ, а то будет падать по нехватке прав доступа).
8. XelOla 16 10.07.18 15:54 Сейчас в теме
(5) нет, обратная ситуация возможна?
РОль Руководитель без ограничений, остальные роли - с ограничением?
14. herfis 270 10.07.18 16:22 Сейчас в теме
(8) А я разве не так сказал?
Но вообще плохо, когда таких ролей много. Правильный подход - в подсистеме БСП "Управление доступом". Там роли максимально декомпозируются по объектам, а осмысленные наборы прав собираются уже профилями доступа.
15. XelOla 16 10.07.18 16:28 Сейчас в теме
(14) подскажите литературу?)
16. herfis 270 10.07.18 16:30 Сейчас в теме
17. XelOla 16 10.07.18 16:33 Сейчас в теме
9. user633533_encantado 2 10.07.18 15:55 Сейчас в теме
Только в бухгалтерии RLS не особо поможет, так как любой пользователь может сформировать ОСВ по счету. Поэтому там и нет такого гибкого механизма доступа.
11. XelOla 16 10.07.18 16:02 Сейчас в теме
21. user633533_encantado 2 10.07.18 17:17 Сейчас в теме
(11) Версия конфигурации имеет значение. Может и дорабатывать ничего не надо,а только настроить.
12. XelOla 16 10.07.18 16:07 Сейчас в теме
(9)
вы можете объяснить RLS?
13. XelOla 16 10.07.18 16:08 Сейчас в теме
18. herfis 270 10.07.18 16:33 Сейчас в теме
Но в вашей текущей ситуации это слабо поможет, насколько я понимаю. Это идеальный вариант, если делать с нуля или типовая ее уже использует (я про подсистему "Управление доступом").
Я вот в самописке внедрил (только со своими шаблонами RLS, а не стандартными) и теперь горя не знаю. Красота нечеловеческая.
19. herfis 270 10.07.18 16:34 Сейчас в теме
У вас, если "в лоб" и "закрыв глаза" - добавить RLS-ограничение на документ во все роли, где разрешено его чтение. А без ограничения оставить только роль "Руководитель".
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Разработчик 1С
Москва
зарплата от 100 000 руб. до 160 000 руб.
Полный день

Программист 1С
Москва
зарплата от 80 000 руб.
Полный день

Консультант-аналитик 1С
Санкт-Петербург
Полный день

Консультант-аналитик 1С
Москва
зарплата от 120 000 руб. до 120 000 руб.
Полный день

Senior 1C Developer ЛЮБОЙ ГОРОД
Москва
зарплата от 80 000 руб.
Полный день