СКД: как ограничить прав доступа внешнего отчета по ролям?

1. user1194102 16.03.20 09:08 Сейчас в теме
Мне нужно, что бы внешним отчетом могли получать данные только определенные пользователи по ролям. Имеется ли возможность в самом внешнем отчете в настройках СКД настроить ограничение прав доступа?
По теме из базы знаний
Найденные решения
10. dhurricane 16.03.20 11:01 Сейчас в теме
(8) Очевидно, Вас не так поняли коллеги. Если Вам всего лишь надо запретить пользователям использовать отчет, то можно еще проще:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Если Не Пользователи.РолиДоступны("ОсобыеПрава") Тогда   
        ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа!'");
    КонецЕсли;
    
КонецПроцедуры
Toliban; TimoninD; kniga888; user1194102; +4 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. TimoninD 16.03.20 09:31 Сейчас в теме
А в принципе, база позволяет видеть эти данные пользователям? Если так, то можно в модуле объекта Отчета, в предопределенной процедуре "При компановке" , проверять доступные роли накладывать ограничения.
user1194102; +1 Ответить
3. user1194102 16.03.20 10:11 Сейчас в теме
(2) Я тоже так думал и даже попытался сделать, но там возникает масса дополнительных вопросов.
стандартную обработку нужно будет ставить в ложь. А что еще выводить кроме проверки прав доступа?
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка 	   = Ложь;
Если РольДоступна("ОпределенныеПрава") Тогда
....
а дальше какой код ?
7. user623969_dusa 16.03.20 10:28 Сейчас в теме
(3) например Программное формирование отчета (СКД)
https://forum.infostart.ru/forum9/topic87696/

если надо кода побольше
https://infostart.ru/public/1179039/
4. user1194102 16.03.20 10:13 Сейчас в теме
(2)
база позволяет видеть эти данные пользователям?
может быть, права пользователя как-то ограничивать в самом запросе?
6. user623969_dusa 16.03.20 10:25 Сейчас в теме
(4) изучать РЛС вы не хотите, думаете изобрести свой велосипед
18. user1194102 16.03.20 13:58 Сейчас в теме
(6) я уж изучил рлс) , поэтому и не хочу его использовать, оно тормозит программу. А использование процедуры Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка), это не велосипед. А программная настройка в СKД? может вам ее поизучать?
5. TimoninD 16.03.20 10:24 Сейчас в теме
Можно исходя из ролей сделать какой - нибудь отбор .. Чтобы пользователю ограничить данные.. Либо вообще все скрыть.. (не знаю всей задачи). Как сделать элемент отбор и применить его, легко гуглится..
19. user1194102 16.03.20 14:04 Сейчас в теме
(5)в типовой ут мне попадалось что-то подобное вроде бы, посмотрю дома ради интереса. С отборами я знаком, склоняюсь больше к проверке прав пользователя в запросе. Если с отборами использовать проверку прав, то это нужно все равно в коде. А в коде я и так уже настроил и все работает.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
		СтандартнаяОбработка = Ложь;
	МакетДопОформление = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); 
	
	НастройкиОтчета = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
	ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(
	ЭтотОбъект.СхемаКомпоновкиДанных,
	ЭтотОбъект.КомпоновщикНастроек.Настройки,
	ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	Если РольДоступна("Т.......") ИЛИ РольДоступна("ПолныеПрава")Тогда   
		ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	Иначе
		ПоказатьПредупреждение(,"Не достаточно прав для создания отчета",20,"Ошибка доступа к отчету");
	КонецЕсли;

	
КонецПроцедуры
Показать
8. user1194102 16.03.20 10:55 Сейчас в теме
Методом проб и ошибок получилось сделать такую настройку, подходящий пример для исправления взял в инете, правда не удалось сказать спасибо автору, там надо было регистрироваться, да и код я немного подправил под себя, вот что в итоге получилось и работает.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	МакетДопОформление = ЭтотОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); 
	
	НастройкиОтчета = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
	ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(
	ЭтотОбъект.СхемаКомпоновкиДанных,
	ЭтотОбъект.КомпоновщикНастроек.Настройки,
	ДанныеРасшифровки);
	
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	Если РольДоступна("ОсобыеПрава") Тогда   
		ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	КонецЕсли;
	
КонецПроцедуры

Показать
10. dhurricane 16.03.20 11:01 Сейчас в теме
(8) Очевидно, Вас не так поняли коллеги. Если Вам всего лишь надо запретить пользователям использовать отчет, то можно еще проще:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Если Не Пользователи.РолиДоступны("ОсобыеПрава") Тогда   
        ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа!'");
    КонецЕсли;
    
КонецПроцедуры
Toliban; TimoninD; kniga888; user1194102; +4 Ответить
12. user1194102 16.03.20 11:21 Сейчас в теме
(10)
Очевидно, Вас не так поняли коллеги
Спасибо, вы очень мягко сформулировали ответ, скорее всего я не понятно объяснил, что именно хочу. Ваше решение мне больше нравится, попробую.
13. user1194102 16.03.20 11:44 Сейчас в теме
14. dhurricane 16.03.20 11:46 Сейчас в теме
(13) Так я и представил код, который специально выдает ошибку, если у пользователя нет прав. :-)
user1194102; +1 Ответить
15. user1194102 16.03.20 11:48 Сейчас в теме
(14) все хорошо, я поспешил, зашел не тем пользователем в сам конфигуратор
16. user1194102 16.03.20 13:03 Сейчас в теме
(14)
Так я и представил код, который специально выдает ошибку
А зачем ошибку выдавать, не лучше ли выдавать сообщение, что у вас недостаточно прав и больше ничего не выводить?
17. dhurricane 16.03.20 13:11 Сейчас в теме
(16) Как Вашей душе и душам Ваших пользователей угодно.

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

Если же надумаете обойтись обычным сообщением, то нужно будет дополнительно отключить стандартную обработку:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Если Не Пользователи.РолиДоступны("ОсобыеПрава") Тогда   
        СтандартнаяОбработка = Ложь;
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Недостаточно прав доступа!'"));
    КонецЕсли;
    
КонецПроцедуры
9. kniga888 16.03.20 11:00 Сейчас в теме
В некоторых типовых конфигурациях есть возможность раздавать через RLS доступ к внешним отчетам и обработкам.
user1194102; +1 Ответить
11. user1194102 16.03.20 11:19 Сейчас в теме
(9) Спасибо, это слишком долго наверно настраивать (у меня upp), проще в самом отчете сделать я думаю
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот