ЗУП — Документ «ОтпускБезСохраненияОплаты» как предоставить доступ к элементам формы, для определенной группы доступа?

Ссылка скопирована
1 ответ

Здравствуйте!
Подскажите пожалуйста куда копать может кто сталкивался...
Есть документ "ОтпускБезСохраненияОплаты", необходимо дать доступ к некоторым элементам формы, для пользователей входящий в определенную группу доступа.
Делаю вот таким образом: Меняю значения свойств элементов формы (по умолчанию ЛОЖЬ) на Истина.
Для документа ПрогулНеявка данный способ работает, а вот для ОтпускБезСохраненияОплаты уже нет.

Да, есть Роль которую можно присвоить профилю группы доступа, однако тогда пользователю будут доступен избыточный функционал (по части ЗП).

Модуль формы:

&НаКлиенте Процедура ПриОткрытии(Отказ) 	         // СтандартныеПодсистемы.Свойства 	УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); 	// Конец СтандартныеПодсистемы.Свойства 	 	// СтандартныеПодсистемы.ПодключаемыеКоманды 	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); 	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды  	РезультатВыполнения = ПривилегияУтвержденияДляГруппы(); 	 	Если РезультатВыполнения Тогда 		ЭтотОбъект.ТолькоПросмотр = Ложь; 		ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; 		ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; 	КонецЕсли; 	 КонецПроцедуры  &НаСервере Функция ПривилегияУтвержденияДляГруппы()          УстановитьПривилегированныйРежим(Истина);     //Группа Табель         ГуидГруппаТабель = "1416c2cc-47ed-11ee-bf97-005056885445";     ТекПользователь =  Пользователи.ТекущийПользователь();          СсылкаГруппа = Справочники.ГруппыДоступа.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидГруппаТабель));          Запрос = Новый Запрос;     Запрос.Текст =      "ВЫБРАТЬ РАЗРЕШЕННЫЕ     |    ГруппыДоступаПользователи.Пользователь КАК Пользователь,     |    ГруппыДоступаПользователи.Ссылка КАК Ссылка     |ИЗ     |    Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи     |ГДЕ     |    ГруппыДоступаПользователи.Пользователь = &Пользователь     |    И ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа";          Запрос.УстановитьПараметр("Пользователь", ТекПользователь);     Запрос.УстановитьПараметр("ГруппаДоступа", СсылкаГруппа);          ДанныеЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0);      Если  ДанныеЗапроса.Количество() <> 0 Тогда         ЭтотОбъект.Объект.Рассчитал = ЭтотОбъект.Объект.Ответственный;         УстановитьПривилегированныйРежим(Ложь);         Возврат Истина;     Иначе         УстановитьПривилегированныйРежим(Ложь);         Возврат Ложь;     КонецЕсли;          КонецФункции

&НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.Свойства УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды РезультатВыполнения = ПривилегияУтвержденияДляГруппы(); Если РезультатВыполнения Тогда ЭтотОбъект.ТолькоПросмотр = Ложь; ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; КонецЕсли; КонецПроцедуры &НаСервере Функция ПривилегияУтвержденияДляГруппы() УстановитьПривилегированныйРежим(Истина); //Группа Табель ГуидГруппаТабель = "1416c2cc-47ed-11ee-bf97-005056885445"; ТекПользователь = Пользователи.ТекущийПользователь(); СсылкаГруппа = Справочники.ГруппыДоступа.ПолучитьСсылку(Новый УникальныйИдентификатор(ГуидГруппаТабель)); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ГруппыДоступаПользователи.Пользователь КАК Пользователь, | ГруппыДоступаПользователи.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи |ГДЕ | ГруппыДоступаПользователи.Пользователь = &Пользователь | И ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа"; Запрос.УстановитьПараметр("Пользователь", ТекПользователь); Запрос.УстановитьПараметр("ГруппаДоступа", СсылкаГруппа); ДанныеЗапроса = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(0); Если ДанныеЗапроса.Количество() <> 0 Тогда ЭтотОбъект.Объект.Рассчитал = ЭтотОбъект.Объект.Ответственный; УстановитьПривилегированныйРежим(Ложь); Возврат Истина; Иначе УстановитьПривилегированныйРежим(Ложь); Возврат Ложь; КонецЕсли; КонецФункции

Дополнительно:

Ответы:

Вам бы пройти какие-то базовые курсы программирования 1С и тогда не будете задавать элементарные вопросы с огромными случайными ЗУПовскими листингами, которые к формам не имеют никакого значения.

Базовые понятия:
1) У элемента формы есть свойство видимость, которым можно управлять программно
2) У элемента формы есть доступность по ролям, где можно для указанных ролей разрешить или запретить видимость
3) У элементов формы можно управлять видимостью по функциональным опциям

  • Спасибо за попытку подсказки)
    Однако, что значит "случайные ЗУПовские листинги"?)
    Вы наверное не обратили внимание, что все операции по элементам формы я провожу в "Процедуре-обработчика событий "При открытии()". В моем случаем мне нужно изменять значение свойства "доступность", у элемента формы.

    Пример своей доработки я привел в самом начале.

    Если РезультатВыполнения Тогда 		ЭтотОбъект.ТолькоПросмотр = Ложь; 		ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; 		ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; КонецЕсли;

    Если РезультатВыполнения Тогда ЭтотОбъект.ТолькоПросмотр = Ложь; ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; ЭтотОбъект.Элементы.Рассчитал.Доступность = Истина; КонецЕсли;

    По умолчанию: ЭлементФормы.Доступность = Ложь
    Добавлять роли , в настоящий профиль доступа, в моем случае недопустимо. Это приведет к избыточному функционалу.

  • Алексей, свойство Доступность как ни странно влияет только на Доступность. Чтобы отключить видимость, нужно использовать Видимость:
    ЭтотОбъект.Элементы.ПерерасчетВыполнен.Видимость = Ложь;

    ЭтотОбъект.Элементы.ПерерасчетВыполнен.Видимость = Ложь;

  • Понятно за что отвечают эти два свойства.
    Проблема в том, что при открытии формы два элемента формы документа недоступны. Даже после моей доработки в "Процедуре-обработчика событий", где я определяю текущего пользователя и его группу доступа:
    Если ГруппаДоступа Тогда       ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; КонецЕсли

    Если ГруппаДоступа Тогда ЭтотОбъект.Элементы.ПерерасчетВыполнен.Доступность = Истина; КонецЕсли

    Проверял и доступность Родителей, до высшего уровня.
    Может есть какие-нибудь еще свойства ФормыКлиентскогоПриложения, которые могут повлиять на доступность?

  • Проверял и доступность Родителей, до высшего уровня.

    Действительно, если отключить доступность группы, в которую включен элемент формы, то он автоматически станет недоступен. Проверить тут ли проблема очень легко - создайте новую группу и перенесите туда элемент формы - это можно даже сделать в режиме пользователя с помощью изменения формы.

    Может есть какие-нибудь еще свойства ФормыКлиентскогоПриложения, которые могут повлиять на доступность?

    Помимо тех троих пунктов, которые я уже написал, еще может влиять условное оформление формы, которое может формироваться программно. Но тут есть ряд ограничений платформы - точно знаю, что свойство видимость можно отключать только для подчиненных элементов (например у колонок табличных частей). С доступностью через оформление не экспериментировал.

    Если по всем настройкам элемент должен быть доступен, а по факту нет, то можно потрасировать открытие формы. В ДО сталкивался с такой штукой, как доступность по состояниям. В коде отладка показывает что ТолькоПросмотр = Ложь и Доступность = Истина, но свойство на форме заблокировано. При отладке видно, что ПриЧтении происходит множественное проваливание в кишки конфигурации, где доступность отключается, а когда управление возвращается в контекст формы, отладчик почему-то не видит новое значение.

  • Дмитрий Кинаш, Спасибо! Буду пробовать.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Алексей Денисов Ответ

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

Одним из способов реализации доступа к элементам формы для определенной группы пользователей является использование ролей и разрешений. Например, если вы используете фреймворк 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')) {
    // Показать элементы формы для пользователей с разрешением на редактирование
}

// Определение ролей и разрешений $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')) { // Показать элементы формы для пользователей с разрешением на редактирование }

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

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно