09.04.2018, 14:55 | #1 |
Участник
|
Как ограничить доступ к редактированию полей на форме определенной группе пользователей
Добрый день.
Подскажите, пожалуйста, как ограничить доступ к редактированию полей на форме определенной группе пользователей. Предистория - есть группа пользователей "Бухгалтерия" и группа пользователей "Закупка". Закупщики создают договоры, поставщиков и регистрируют заказ на покупку, счет на оплату. У бухгалтеров на все это тоже есть полный доступ, в каких-то случаях они сами все это делают, + имеется куча других прав. Теперь бухгалтеры хотят, чтобы Закупщики создавали Договоры, Поставщиков, но после сохранения не могли редактировать данные. Доступ на редактирование должен быть только у бухгалтеров и у админов. Делала так, но теперь у Закупщиков при создании договора данные поля не доступны совсем. Как еще это можно сделать, чтобы выполнялись требования бухгалтерии? Делала на форме RContractTable метод init() public void init() { Args args = this.args(); super(); if (args.parmEnumType() == enumnum(RcontractPartnerTypeAll)) { contractType.selection(args.parmEnum()); } contractType.visible(! this.args().dataset() && contractType.selection() == RcontractPartnerTypeAll::All); this.updateDesign(); // --> if(UserInfoHelp::userInUserGroup(curUserId(), 'Закупка' )&&!UserInfoHelp::userInUserGroup(curUserId(), 'Admin' )&&!UserInfoHelp::userInUserGroup(curUserId(), 'Бухгалтерия' )) { allowEdit = UserInfoHelp::userInUserGroup(curUserId(), 'Закупка'); RContractTable_SubContract.allowEdit(!allowedit); RContractTable_ContractDate.allowEdit(!allowedit); RContractTable_RContractNumber.allowEdit(!allowedit); RContractTable_BusinessNum.allowEdit(!allowedit); RContractTable_PrivateNum.allowEdit(!allowedit); RContractTable_ContractAmount.allowEdit(!allowedit); RContractTable_RContractStatus.allowEdit(!allowedit); RContractTable_PostingProfile.allowEdit(!allowedit); RContractTable_Sign_DeferredCharges.allowEdit(!allowedit); RContractTable_MainContractAccount.allowEdit(!allowedit); LongContract.allowEdit(!allowedit); } // <-- } |
|
09.04.2018, 15:28 | #2 |
северный Будда
|
А что мешает просто сделать проверку на сохранении записи?
__________________
С уважением, Вячеслав |
|
10.04.2018, 06:16 | #3 |
Участник
|
|
|
10.04.2018, 06:19 | #4 |
Участник
|
И кажется мне нужно было разместить тему в разделе Программирование
Просьба модераторам перенести тему в раздел Программирование. Спасибо. Последний раз редактировалось Natali77; 10.04.2018 в 06:40. |
|
10.04.2018, 09:36 | #5 |
северный Будда
|
Например, так:
В каждом датасурсе, поля в которых надо защищать, перекрываете метод active. Внутри метода определяете, сохранена ли запись (курсор должен иметь ненулевой RecId) и относится ли пользователь к нужной группе. Если оба условия выполнены - ставите allowEdit датасоурса в true. Это если вкратце. По-хорошему, я бы ещё в этот момент обрабатывал allowDelete. P.S. Те же манипуляции можно сделать на validateWrite таблицы датасоурса, только там не allowEdit надо параметризировать, а возвращаемое значение.
__________________
С уважением, Вячеслав Последний раз редактировалось pitersky; 10.04.2018 в 09:39. |
|
10.04.2018, 12:12 | #6 |
Участник
|
Цитата:
Сообщение от pitersky
Например, так:
В каждом датасурсе, поля в которых надо защищать, перекрываете метод active. Внутри метода определяете, сохранена ли запись (курсор должен иметь ненулевой RecId) и относится ли пользователь к нужной группе. Если оба условия выполнены - ставите allowEdit датасоурса в true. Это если вкратце. По-хорошему, я бы ещё в этот момент обрабатывал allowDelete. P.S. Те же манипуляции можно сделать на validateWrite таблицы датасоурса, только там не allowEdit надо параметризировать, а возвращаемое значение. |
|
10.04.2018, 12:26 | #7 |
северный Будда
|
Цитата:
X++: boolean isValidGroup = (UserInfoHelp::userInUserGroup(curUserId(), 'Admin' ) || UserInfoHelp::userInUserGroup(curUserId(), 'Бухгалтерия' )); MyTable this_orig = this.orig(); if (this.RecId && !isValidGroup) { if (this.FieldToCheck != this_orig.FieldToCheck) { ret = checkFailed("This field can be changed only by admins or accountants"); } }
__________________
С уважением, Вячеслав |
|
10.04.2018, 13:19 | #8 |
Участник
|
Цитата:
Сообщение от pitersky
ну вот так можно на validateWrite таблицы MyTable
X++: boolean isValidGroup = (UserInfoHelp::userInUserGroup(curUserId(), 'Admin' ) || UserInfoHelp::userInUserGroup(curUserId(), 'Бухгалтерия' )); MyTable this_orig = this.orig(); if (this.RecId && !isValidGroup) { if (this.FieldToCheck != this_orig.FieldToCheck) { ret = checkFailed("This field can be changed only by admins or accountants"); } } |
|
10.04.2018, 13:32 | #9 |
Участник
|
Цитата:
Сообщение от pitersky
Например, так:
В каждом датасурсе, поля в которых надо защищать, перекрываете метод active. Внутри метода определяете, сохранена ли запись (курсор должен иметь ненулевой RecId) и относится ли пользователь к нужной группе. Если оба условия выполнены - ставите allowEdit датасоурса в true. Это если вкратце. По-хорошему, я бы ещё в этот момент обрабатывал allowDelete. P.S. Те же манипуляции можно сделать на validateWrite таблицы датасоурса, только там не allowEdit надо параметризировать, а возвращаемое значение. |
|
Теги |
поля на форме запрет редактирования |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|