Нарушение прав доступа при обращении к хранилищу общих настроек

1. ico 09.09.24 11:26 Сейчас в теме
В наличии конфигурация Комплексная Автоматизация 2.5.17.128.
В своем расширении сохраняю путь к файлу выгрузки в строковом реквизите в общем хранилище. При открытии читаю, при закрытии пишу туда.
При полных правах - работает прекрасно. А вот попробовал запустить под обычным пользователем - дает ошибку...
Ошибка при вызове метода контекста (Загрузить)
{икВыгрузкаЗПвБанк Документ.ВедомостьНаВыплатуЗарплатыВБанк.Форма.ФормаДокумента.Форма(36)}: РезультатИзХранилища = ХранилищеОбщихНастроек.Загрузить("Расширение_икВыгрузкаЗПвБанк", "ИмяФайлаВыгрузкиДляБанка",, "РасчетчикЗП");
{икВыгрузкаЗПвБанк Документ.ВедомостьНаВыплатуЗарплатыВБанк.Форма.ФормаДокумента.Форма(7)}: ИмяФайлаВыгрузкиБанк = ВосстановитьИмяФайлаВыгрузкиНаСервере();
по причине:
Нарушение прав доступа!

Какие права надо дать пользователю, чтобы можно было использовать хранилище?

Вот кусочек кода, где ошибка поселилась.
&НаКлиенте
Процедура Расш_икВыгрузитьВБанкПосле(Команда)
	
	// 1. Надо вспомнить имя файла предыдущего сохранения.
	//
	ИмяФайлаВыгрузкиБанк = ВосстановитьИмяФайлаВыгрузкиНаСервере();
	
	// 2. Выдать диалог выбора файла для записи.
	//
	ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	ДиалогВыбора.Заголовок = "Надо задать имя файла выгрузки для банка";
	ДиалогВыбора.Фильтр = "Файлы выгрузки(*.csv)|*.csv";
	ДиалогВыбора.ИндексФильтра = 0;
	ДиалогВыбора.ПредварительныйПросмотр = Ложь;
	ДиалогВыбора.ПроверятьСуществованиеФайла = Истина;
	ДиалогВыбора.МножественныйВыбор = Ложь; 
	ДиалогВыбора.Каталог = Лев(ИмяФайлаВыгрузкиБанк, стрНайти(ИмяФайлаВыгрузкиБанк, "\", НаправлениеПоиска.СКонца)); 
	ДиалогВыбора.ПолноеИмяФайла = Сред(ИмяФайлаВыгрузкиБанк, стрНайти(ИмяФайлаВыгрузкиБанк, "\", НаправлениеПоиска.СКонца) + 1);
	
	// 3. Отдаем имя файла на сервер и там формируем и сохраняем файл.
	//
	Если ДиалогВыбора.Выбрать() Тогда
		ИмяФайлаВыгрузкиБанк = ДиалогВыбора.ПолноеИмяФайла;
		ВыгрузитьФайлВедомостьВБанк(ИмяФайлаВыгрузкиБанк);
		Сообщить("Файл " + ИмяФайлаВыгрузкиБанк + " записан.");
	КонецЕсли;	
	
КонецПроцедуры

&НаСервере
Функция ВосстановитьИмяФайлаВыгрузкиНаСервере()
	
	РезультатИзХранилища = ХранилищеОбщихНастроек.Загрузить("Расширение_икВыгрузкаЗПвБанк", "ИмяФайлаВыгрузкиДляБанка",, "РасчетчикЗП");
	Если ТипЗнч(РезультатИзХранилища) = Тип("Структура") Тогда
		Если РезультатИзХранилища.Свойство("ИмяФайлаВыгрузки") Тогда
			Возврат РезультатИзХранилища.ИмяФайлаВыгрузки;
		Иначе
			Возврат "";
		КонецЕсли;
	Иначе
		Возврат "";
	КонецЕсли;
	
КонецФункции  
Показать
По теме из базы знаний
Найденные решения
2. laperuz 47 09.09.24 11:44 Сейчас в теме
Если это делается не под пользователем РасчетчикЗП, то нужно право АдминистрированиеДанных, см. синтакс-помощник:

Если указан пользователь, не являющийся текущим пользователем, т.е. делается попытка обратиться к настройкам, не принадлежащим текущему пользователю, то требуется наличие у текущего пользователя права АдминистрированиеДанных.
8. Sashares 35 23.09.24 10:00 Сейчас в теме
(7) В конфигурациях на БСП нельзя менять пользователям состав ролей в конфигураторе.
Права настраиваются в пользовательском режиме.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. laperuz 47 09.09.24 11:44 Сейчас в теме
Если это делается не под пользователем РасчетчикЗП, то нужно право АдминистрированиеДанных, см. синтакс-помощник:

Если указан пользователь, не являющийся текущим пользователем, т.е. делается попытка обратиться к настройкам, не принадлежащим текущему пользователю, то требуется наличие у текущего пользователя права АдминистрированиеДанных.
3. ico 09.09.24 11:55 Сейчас в теме
(2) Такого права не нашел в Комплексной... Установил право "Администрирование" - взлетело.
Сделал запись настроек под РасчетчикомЗП. Прочитал - проверил, все ОК.
Вышел, убрал право Администрирование. Пробую снова Расчетчиком - дает ошибку.
Вывод - в синтакс-помощнике написано неверно. Не проверяется кем была проведена запись в хранилище. Всегда проверяется право Администрирование.
Спасибо за наводку. Сам бы я это право не стал бы проверять...
4. user1936660 09.09.24 14:35 Сейчас в теме
(3)
Вывод - в синтакс-помощнике написано неверно.
А мужики-то не знают...
5. ico 23.09.24 09:27 Сейчас в теме
Заметил еще одну неприятную особенность. Эта самая роль "Администрирование" время от времени у пользователя слетает. Когда это происходит - не могу отследить. Но, как правило, утро начинается с сообщения в Ватсапе - "Я опять не могу сделать выгрузку в банк". Проверяю роли пользователя - галочки уже нет.
Зачем и кем убирается эта роль? И как сделать так, чтобы галочка стояла попрочнее? Возможно, еще какая-то роль должна быть разрешена...
6. user2033930 23.09.24 09:30 Сейчас в теме
(5) 1. Роль и Право - это разные вещи.
2. БСП, Управление доступом.
7. ico 23.09.24 09:48 Сейчас в теме
(6) 1. Согласен. В данном случае речь идет о ролях.
2. Это подсказка?
8. Sashares 35 23.09.24 10:00 Сейчас в теме
(7) В конфигурациях на БСП нельзя менять пользователям состав ролей в конфигураторе.
Права настраиваются в пользовательском режиме.
9. ico 23.09.24 10:08 Сейчас в теме
(8) Спасибо. Теперь разобрался.
10. ico 23.09.24 10:42 Сейчас в теме
А все равно не так...
Дал в пользовательском режиме права на "Открытие внешних отчетов и обработок" - все равно выдает "Нарушение прав доступа" при попытке обратиться к хранилищу настроек.
У меня больше нет подходящих прав...
Вы уж простите, может я ерунду какую-то спрашиваю... Всю жизнь на УПП работал, а тут вот это...
11. user2033930 23.09.24 10:50 Сейчас в теме
(10) Перепиши уже внешнюю обработку так, чтобы она сохраняла и читала настройки для текущего пользователя (у каждого свои настройки будут). Или используй при сохранении/чтении настроек пустого пользователя (пустая строка) - тогда все настройки будут общими, и никаких прав на них проверяться не будет.

И не парь мозг. Всем.
16. ico 23.09.24 11:41 Сейчас в теме
(11) Попробовал по-разному, заработало только вот в такой конфигурации - пользователя вообще не указываешь
РезультатИзХранилища = ХранилищеОбщихНастроек.Загрузить("Расширение_икВыгрузкаЗПвБанк", "ИмяФайлаВыгрузкиДляБанка");
ХранилищеОбщихНастроек.Сохранить("Расширение_икВыгрузкаЗПвБанк", "ИмяФайлаВыгрузкиДляБанка", Новый Структура("ИмяФайлаВыгрузки", ИмяФайла));

Тогда работает. При пустом пользователе - снова ошибка доступа.
17. user2033930 23.09.24 13:20 Сейчас в теме
(16) Чтобы прочитать что-то ненужное - надо сначала сохранить что-то ненужное.
Естественно, ты настройки сохраненные под другим пользователем не прочитаешь с пустым ключом.
Или ты думал, что наличие пустого ключа дает какие-то безграничные права? Так нет - безгранично пользоваться можно только тем, что выложили именно для безграничного пользования.
18. ico 23.09.24 14:13 Сейчас в теме
(17) Может Вы не всё прочитали...
Запускаю под пользователем с полными правами, сохраняю. В сохранении указываю пользователя "РасчетчикЗП" (напомню, что это строковый реквизит и смысл его, как его позиционирует 1С, - пользователь)
Запускаю второй раз - прекрасно всё читается.
Теперь запускаю под другим пользователем без полных прав. В чтении и сохранении указан тот же пользователь. И происходит ошибка доступа.
И, наконец, запускаю под полными правами, записываю без указания пользователя. Запускаю без полных прав - читается без указания пользователя и без ошибок.
И вот тут у меня непонятки - этот параметр "Пользователь" - он для чего? Какова его смысловая нагрузка? И почему он строковый?
12. Sashares 35 23.09.24 10:50 Сейчас в теме
(10) Не сохранять под чужим пользователем настройки. Это плохое решение.
Каждому пользователю сохранять настройки под собой.
При первом открытии обработки, можете явно присвоить в коде значение по умолчанию.
Далее, если настройки были под этим пользователем сохранены - они загрузятся.
13. user2033930 23.09.24 11:06 Сейчас в теме
(12)
Не сохранять под чужим пользователем настройки.
Уточню - "под чужим существующим". А вот под абстрактным (несуществующим) - сколько угодно. Если по ключевой строке система не нашла пользователя - то и права проверяться не будут.
Sashares; +1 Ответить
14. Sashares 35 23.09.24 11:11 Сейчас в теме
15. user2033930 23.09.24 11:24 Сейчас в теме
(14) Я общие настройки внешних обработок всегда под пустой строкой пользователя сохраняю, в итоге они доступны всем и всегда для чтения. А вот их редактирование в отдельной форме (и последующую запись) уже регулирую ролями.
Sashares; +1 Ответить
Оставьте свое сообщение

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