AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.04.2018, 14:55   #1  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Red face Как ограничить доступ к редактированию полей на форме определенной группе пользователей
Добрый день.

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

Делала так, но теперь у Закупщиков при создании договора данные поля не доступны совсем. Как еще это можно сделать, чтобы выполнялись требования бухгалтерии?

Делала на форме 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  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
А что мешает просто сделать проверку на сохранении записи?
__________________
С уважением,
Вячеслав
Старый 10.04.2018, 06:16   #3  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от pitersky Посмотреть сообщение
А что мешает просто сделать проверку на сохранении записи?

Подскажите как это сделать? в этом же методе нужно? Спасибо.
Старый 10.04.2018, 06:19   #4  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
И кажется мне нужно было разместить тему в разделе Программирование

Просьба модераторам перенести тему в раздел Программирование.

Спасибо.

Последний раз редактировалось Natali77; 10.04.2018 в 06:40.
Старый 10.04.2018, 09:36   #5  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Natali77 Посмотреть сообщение
Подскажите как это сделать? в этом же методе нужно? Спасибо.
Например, так:
В каждом датасурсе, поля в которых надо защищать, перекрываете метод active. Внутри метода определяете, сохранена ли запись (курсор должен иметь ненулевой RecId) и относится ли пользователь к нужной группе. Если оба условия выполнены - ставите allowEdit датасоурса в true.
Это если вкратце.

По-хорошему, я бы ещё в этот момент обрабатывал allowDelete.

P.S. Те же манипуляции можно сделать на validateWrite таблицы датасоурса, только там не allowEdit надо параметризировать, а возвращаемое значение.
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 10.04.2018 в 09:39.
Старый 10.04.2018, 12:12   #6  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от pitersky Посмотреть сообщение
Например, так:
В каждом датасурсе, поля в которых надо защищать, перекрываете метод active. Внутри метода определяете, сохранена ли запись (курсор должен иметь ненулевой RecId) и относится ли пользователь к нужной группе. Если оба условия выполнены - ставите allowEdit датасоурса в true.
Это если вкратце.

По-хорошему, я бы ещё в этот момент обрабатывал allowDelete.

P.S. Те же манипуляции можно сделать на validateWrite таблицы датасоурса, только там не allowEdit надо параметризировать, а возвращаемое значение.
Благодарю за ответ. А можно пример привести такого кода? Так как чайник совсем(
Старый 10.04.2018, 12:26   #7  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,486 / 408 (16) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от Natali77 Посмотреть сообщение
Благодарю за ответ. А можно пример привести такого кода? Так как чайник совсем(
ну вот так можно на 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:19   #8  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от 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  
Natali77 is offline
Natali77
Участник
 
39 / 10 (1) +
Регистрация: 05.09.2016
Цитата:
Сообщение от pitersky Посмотреть сообщение
Например, так:
В каждом датасурсе, поля в которых надо защищать, перекрываете метод active. Внутри метода определяете, сохранена ли запись (курсор должен иметь ненулевой RecId) и относится ли пользователь к нужной группе. Если оба условия выполнены - ставите allowEdit датасоурса в true.
Это если вкратце.

По-хорошему, я бы ещё в этот момент обрабатывал allowDelete.

P.S. Те же манипуляции можно сделать на validateWrite таблицы датасоурса, только там не allowEdit надо параметризировать, а возвращаемое значение.
По первому пункту - перекрытию метода active можно пример тоже?
Теги
поля на форме запрет редактирования

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
В некоторых случаях не отображаются элементы дерева на форме Права групп пользователей McArrow DAX: Программирование 0 17.06.2013 18:30
Периодически пропадает доступ к Системе у удаленных пользователей andy_555 DAX: Администрирование 4 04.03.2009 15:02
Кто знает можно как нибудь открыть доступ к полю на форме если DataSource закрыт для AlexT1 DAX: Программирование 9 03.11.2005 00:18
Перемещение полей на форме Swetik DAX: Функционал 12 15.09.2004 19:29
доступ к свойствам полей DataSource andreynikolai DAX: Программирование 2 06.06.2002 16:55
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 16:22.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.