1. den17 19.04.19 17:03 Сейчас в теме

Программно Не добавляются Роли

Здравствуйте. (УПП 1.3_1С 8.3)
Стоит задача: Добавить права пользователю программно ↔ провести документы по Регл. учету и → отобрать эти права. Создал общий модуль. Сервер/Привилегированный/ВызовСервера/Повторное использование возвращаемых значений → На время вызова. Пишу пишу в модуле.
УстановитьПривилегированныйРежим(ИСТИНА);
ПользовательБД = ПользователиИнформационнойБазы.ТекущийПользователь();
Если НЕ ПользовательБД.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда
....................................................................................
ПользовательБД.Роли.Добавить(Метаданные.Роли.ПолныеПрава);
.............................................................
// В этот момент РОЛЬ ДОБАВЛЯЕТСЯ
ПользовательБД.Записать();
...........................................................................
Записываю документ (это здесь не важно)
.....................................................................................
Но когда проверяю на Если РольДоступна("ПолныеПрава") → она недоступна!!
.....................................................................................................
Затем удаляю это право

ПользовательБД.Роли.Удалить(Метаданные.Роли.ПолныеПрава);
........................................................................................................................................
Ничего не получается, тк Роль как бы добавилась при Роли. Добавить.. (выводил список) но она недоступна.

---------------------------------------------------------------------------------------------------------------------------
Еще один момент: Если из текста модуля убрать Удаление этого права (строку Удалить(... → то все прекрасно работает, но пользователь остается с полными правами после нужных действий.
Как отобрать у него права??
Вознаграждение за ответ
Показать полностью
Ответы
Избранное Подписка Сортировка: Древо
7. DJDUH 17 19.04.19 17:20 Сейчас в теме
(1) Уберите повторное использование и добавление ролей пользователю у/в модуля и попробуйте те-же действия.
11. ksen 22.04.19 09:21 Сейчас в теме
(1) а если сделать код типа
1)дать права
2)проверка условия типа "если документ на который не хватало прав провелся" то
забрать права у пользователя
Мне очень интересно как себя поведет 1с в таком случае, сам проверить не могу, нед под рукой конфигуратора

Ну и если эта штука вдруг заработает добавить обработку ошибок в которой тоже надо будет отбирать права
2. palsergeich 19.04.19 17:12 Сейчас в теме
Так как вы проверяете в этом же сеансе - надо перезайти в базу. Роли пользователя кешируются при входе. И при изменении состава ролей - необходим повторный вход.
3. palsergeich 19.04.19 17:14 Сейчас в теме
А вообще - такое себе решение решение проблемы на самом деле.
В Вашем случае не надо играть с ролями, используйте УстановитьПривелегированныйРежим().
user614822; +1 Ответить
4. den17 19.04.19 17:17 Сейчас в теме
(3) УстановитьПривилегированныйРежим(ИСТИНА) в самом начале устанавливается. Если без ролей -- не дает проводить по Регл. учету все равно
5. palsergeich 19.04.19 17:19 Сейчас в теме
Проверьте - не выполняется ли код в безопасном режиме.
Если да - то установка привелегированного режима - игнорируется
12. ksen 22.04.19 09:24 Сейчас в теме
(5)а разве изменение прав пользователей не означает что можно УстановитьПривилегированныйРежим(ИСТИНА) по умолчанию?
13. palsergeich 22.04.19 11:59 Сейчас в теме
6. palsergeich 19.04.19 17:20 Сейчас в теме
БезопасныйРежим() Функция проверки
8. den17 19.04.19 18:28 Сейчас в теме
А как правильно Удалить только-что данные права. Только вводишь слово Удалить -- программа ведет себя неадекватно..
Убираешь Удалить -- все работает как надо.
Я разносил их в разные модули -- помогает только при первом запуске -- потом то же самое.
9. sashocq 192 19.04.19 22:12 Сейчас в теме
После изменения состава ролей нужно действительно перезайти в базу. Но так не делается!
Нужно использовать УстановитьПривилегированныйРежим(Истина). Есть только один момент: он работает как надо только на сервере. Т. е. вам нужно использовать её и тот код что нужно выполнить привилегированно в серверном модуле. При чём, если мы говорим про УПП (обычные формы), то в файловой базе это работать не будет, только в клиент-серверной (я с этим давно сталкивался).
10. dimon_tb 20.04.19 22:34 Сейчас в теме
а если подойти к решению задачи по другому:
При проведение поставить
<Объект>.ОбменДанными.Загрузка = истина;
14. user681528_sbscomp 24.04.19 12:15 Сейчас в теме
(10) ОбменДанными отключит только проверки на корректность проведения, прав он не добавит.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

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

Работа от Инфостарт
Санкт-Петербург
Временный (на проект)

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

Ведущий программист 1С
Сочи
зарплата от 82 500 руб. до 99 000 руб.
Полный день