ЗУП — Документ «ОтпускБезСохраненияОплаты» как предоставить доступ к элементам формы, для определенной группы доступа?
Здравствуйте!
Подскажите пожалуйста куда копать может кто сталкивался...
Есть документ "ОтпускБезСохраненияОплаты", необходимо дать доступ к некоторым элементам формы, для пользователей входящий в определенную группу доступа.
Делаю вот таким образом: Меняю значения свойств элементов формы (по умолчанию ЛОЖЬ) на Истина.
Для документа ПрогулНеявка данный способ работает, а вот для ОтпускБезСохраненияОплаты уже нет.
Да, есть Роль которую можно присвоить профилю группы доступа, однако тогда пользователю будут доступен избыточный функционал (по части ЗП).
Модуль формы:
&НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.Свойства УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды РезультатВыполнения = ПривилегияУтвержденияДляГруппы(); Если РезультатВыполнения Тогда ЭтотОбъект.ТолькоПросмотр = Ложь; ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; КонецЕсли; КонецПроцедуры &НаСервере Функция ПривилегияУтвержденияДляГруппы() УстановитьПривилегированныйРежим(Истина); //Группа Табель ГуидГруппаТабель = "1416c2cc-47ed-11ee-bf97-005056885445"; ТекПользователь = Пользователи.ТекущийПользователь(); СсылкаГруппа = Справочники.ГруппыДоступа.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидГруппаТабель)); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ГруппыДоступаПользователи.Пользователь КАК Пользователь, | ГруппыДоступаПользователи.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи |ГДЕ | ГруппыДоступаПользователи.Пользователь = &Пользователь | И ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа"; Запрос.УстановитьПараметр("Пользователь", ТекПользователь); Запрос.УстановитьПараметр("ГруппаДоступа", СсылкаГруппа); ДанныеЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); Если ДанныеЗапроса.Количество() <> 0 Тогда ЭтотОбъект.Объект.Рассчитал = ЭтотОбъект.Объект.Ответственный; УстановитьПривилегированныйРежим(Ложь); Возврат Истина; Иначе УстановитьПривилегированныйРежим(Ложь); Возврат Ложь; КонецЕсли; КонецФункции |
&НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.Свойства УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды РезультатВыполнения = ПривилегияУтвержденияДляГруппы(); Если РезультатВыполнения Тогда ЭтотОбъект.ТолькоПросмотр = Ложь; ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; КонецЕсли; КонецПроцедуры &НаСервере Функция ПривилегияУтвержденияДляГруппы() УстановитьПривилегированныйРежим(Истина); //Группа Табель ГуидГруппаТабель = "1416c2cc-47ed-11ee-bf97-005056885445"; ТекПользователь = Пользователи.ТекущийПользователь(); СсылкаГруппа = Справочники.ГруппыДоступа.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидГруппаТабель)); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ГруппыДоступаПользователи.Пользователь КАК Пользователь, | ГруппыДоступаПользователи.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи |ГДЕ | ГруппыДоступаПользователи.Пользователь = &Пользователь | И ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа"; Запрос.УстановитьПараметр("Пользователь", ТекПользователь); Запрос.УстановитьПараметр("ГруппаДоступа", СсылкаГруппа); ДанныеЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); Если ДанныеЗапроса.Количество() <> 0 Тогда ЭтотОбъект.Объект.Рассчитал = ЭтотОбъект.Объект.Ответственный; УстановитьПривилегированныйРежим(Ложь); Возврат Истина; Иначе УстановитьПривилегированныйРежим(Ложь); Возврат Ложь; КонецЕсли; КонецФункции
Дополнительно:
Ответы:
Вам бы пройти какие-то базовые курсы программирования 1С и тогда не будете задавать элементарные вопросы с огромными случайными ЗУПовскими листингами, которые к формам не имеют никакого значения.
Базовые понятия:
1) У элемента формы есть свойство видимость, которым можно управлять программно
2) У элемента формы есть доступность по ролям, где можно для указанных ролей разрешить или запретить видимость
3) У элементов формы можно управлять видимостью по функциональным опциям
- Спасибо за попытку подсказки)
Однако, что значит "случайные ЗУПовские листинги"?)
Вы наверное не обратили внимание, что все операции по элементам формы я провожу в "Процедуре-обработчика событий "При открытии()". В моем случаем мне нужно изменять значение свойства "доступность", у элемента формы.
Пример своей доработки я привел в самом начале.
Если РезультатВыполнения Тогда ЭтотОбъект.ТолькоПросмотр = Ложь; ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; КонецЕсли;
Если РезультатВыполнения Тогда ЭтотОбъект.ТолькоПросмотр = Ложь; ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; КонецЕсли;
По умолчанию: ЭлементФормы.Доступность = Ложь
Добавлять роли , в настоящий профиль доступа, в моем случае недопустимо. Это приведет к избыточному функционалу. - Алексей, свойство Доступность как ни странно влияет только на Доступность. Чтобы отключить видимость, нужно использовать Видимость:
ЭтотОбъект.Элементы.ПерерасчетВыполнен.Видимость = Ложь;
ЭтотОбъект.Элементы.ПерерасчетВыполнен.Видимость = Ложь;
- Понятно за что отвечают эти два свойства.
Проблема в том, что при открытии формы два элемента формы документа недоступны. Даже после моей доработки в "Процедуре-обработчика событий", где я определяю текущего пользователя и его группу доступа:Если ГруппаДоступа Тогда ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; КонецЕсли
Если ГруппаДоступа Тогда ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; КонецЕсли
Проверял и доступность Родителей, до высшего уровня.
Может есть какие-нибудь еще свойства ФормыКлиентскогоПриложения, которые могут повлиять на доступность? -
Проверял и доступность Родителей, до высшего уровня.
Действительно, если отключить доступность группы, в которую включен элемент формы, то он автоматически станет недоступен. Проверить тут ли проблема очень легко - создайте новую группу и перенесите туда элемент формы - это можно даже сделать в режиме пользователя с помощью изменения формы.
Может есть какие-нибудь еще свойства ФормыКлиентскогоПриложения, которые могут повлиять на доступность?
Помимо тех троих пунктов, которые я уже написал, еще может влиять условное оформление формы, которое может формироваться программно. Но тут есть ряд ограничений платформы - точно знаю, что свойство видимость можно отключать только для подчиненных элементов (например у колонок табличных частей). С доступностью через оформление не экспериментировал.
Если по всем настройкам элемент должен быть доступен, а по факту нет, то можно потрасировать открытие формы. В ДО сталкивался с такой штукой, как доступность по состояниям. В коде отладка показывает что ТолькоПросмотр = Ложь и Доступность = Истина, но свойство на форме заблокировано. При отладке видно, что ПриЧтении происходит множественное проваливание в кишки конфигурации, где доступность отключается, а когда управление возвращается в контекст формы, отладчик почему-то не видит новое значение.
- Дмитрий Кинаш, Спасибо! Буду пробовать.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для предоставления доступа к элементам формы на основе определенной группы доступа, вам необходимо использовать различные методы аутентификации и авторизации в вашем приложении. В зависимости от используемого фреймворка или библиотеки, этот процесс может немного отличаться, но общие принципы будут такими же.
Одним из способов реализации доступа к элементам формы для определенной группы пользователей является использование ролей и разрешений. Например, если вы используете фреймворк Laravel, вы можете определить роли пользователей (например, администратор, менеджер, обычный пользователь) и назначить каждой роли соответствующие разрешения на доступ к определенным элементам формы.
Примерно так это может выглядеть на языке PHP с использованием фреймворка Laravel:
// Определение ролей и разрешений $roleAdmin = Role::create(['name' => 'admin']); $roleManager = Role::create(['name' => 'manager']); $permissionEditForm = Permission::create(['name' => 'edit form']); $permissionDeleteForm = Permission::create(['name' => 'delete form']); // Назначение разрешений ролям $roleAdmin->givePermissionTo($permissionEditForm); $roleAdmin->givePermissionTo($permissionDeleteForm); $roleManager->givePermissionTo($permissionEditForm); // Проверка доступа к элементам формы if (auth()->user()->hasRole('admin')) { // Показать элементы формы для администратора } if (auth()->user()->hasPermissionTo('edit form')) { // Показать элементы формы для пользователей с разрешением на редактирование }
Это лишь пример реализации, и конечный вариант будет зависеть от конкретных требований вашего приложения. Важно помнить, что безопасность всегда должна быть приоритетом, поэтому убедитесь, что вы корректно настраиваете доступ к элементам формы и защищаете ваше приложение от возможных атак.