Дать пользователю права на редактирование константы. УНФ 1.6
Клиент попросил дать одному из пользователей права на изменение константы «Контролировать остатки при проведении».
Добавил новую подсистему, включаемую в командный интерфейс в раздел CRM, т.к. он есть у всех пользователей:
Дал права на эту подсистему всем пользователям (у меня для этого есть роль дор_ДополнительныеПраваВсем, которая назначается всем пользователям).
Сначала я хотел просто включить константу в эту подсистему, чтобы она отображалась как отдельный пункт меню (если у пользователя есть права), но для этого должна стоять галочка «Использовать стандартные команды» у константы. Можно было поставить галочку через расширение. Но мне показалось это неудобным. Как видно, «управляемые» формы опять показали свою негибкость. Вручную константу в интерфейс подсистемы добавить нельзя.
Создал обработку дор_Настройки, которую включил в командный интерфейс новой подсистемы.
В итоге в разделе Сервис у подсистемы CRM появилась команда по открытию этой обработки:
Завел роль дор_МенятьКонтрольОстатков, в которой дал права на редактирование константы:
В форме разместил набор констант, но оказалось, что их нужно инициализировать при открытии:
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Чтобы все константы считались УстановитьПривилегированныйРежим(Истина); ОО = РеквизитФормыВЗначение("КонстантыНабор"); ОО.Прочитать(); ЗначениеВРеквизитФормы(ОО, "КонстантыНабор"); КонецПроцедуры
Мне подсказали, что настройки автоматически считываются только если набор констант — основной реквизит. Но у меня в этой форме будут и другие настройки, я не стал делать набор констант основным реквизитом.
Реализовал, чтобы при изменении значения константы на форме она сразу же записывалась в базу данных:
&НаКлиенте Процедура НаборКонстантКонтролироватьОстаткиПриПроведенииПриИзменении(Элемент) КонстантаЗаписатьНаСервере("КонтролироватьОстаткиПриПроведении"); КонецПроцедуры Процедура КонстантаЗаписатьНаСервере(ИмяКонстанты) Значение = КонстантыНабор[ИмяКонстанты]; Константы[ИмяКонстанты].Установить(Значение); КонецПроцедуры
То что я использую набор констант, а не считываю константы из базы, позволяет мне не заботиться о правах доступа.
Если обработку открывает пользователь без прав на редактирование константы, он не может редактировать константу:
А если права есть, то редактировать можно:
Среда: УНФ 1.6.27.167 Объем: 1.5 час
{ВнешняяОбработка.дор_Настройки.Форма.Форма.Форма(21)}: Ошибка при вызове метода контекста (Прочитать)
ОО.Прочитать();
по причине:
Нарушение прав доступа!
Сложно сказать. Похоже, что у вас обработка запускается в безопасном режиме, поэтому УстановитьПривилегированныйРежим игнорируется.
Попробуйте открыть ее просто из файла, а не из справочника внешних обработок, а в справочнике внешних обработок проверьте режим, не Безопасный ли.