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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.10.2010, 23:02   #1  
EfimV is offline
EfimV
Участник
 
30 / 22 (1) +++
Регистрация: 19.04.2008
Адрес: Москва
AOSAuthorization и права пользователей
DAX2009,ru5
Выдаю пользователю права на таблицы.
Если у таблицы не задано свойство AOSAuthorization то всё в порядке.

Если задано (например LedgerTrans – “Проводки ГК”), то указание доступа на конкретную таблицу недостаточно. Требуется, чтобы был задан доступ на уровне «Таблицы» см. рисунок. (В явном виде задан доступ к securityKey, закрывающему таблицу)

Если я в окне формы задаю доступ на уровне «Таблицы», то «открываются» все таблицы из списка. И приходится все их прощёлкать и забрать доступ обратно.
При этом в большом количестве множатся записи в таблице AccessRightsList.
Если раньше была запись только на таблицу, к которой разрешен доступ, то сейчас указываются все таблицы. В том числе, к которым доступ запрещён.

Вопрос.
Как можно задать доступ к таблице у которой задано свойство AOSAuthorization без того чтобы не пощелкивать все таблицы из списка и не забирать доступ обратно?
Может это делается как то более правильно?
Старый 30.10.2010, 14:25   #2  
someOne is offline
someOne
Участник
Аватар для someOne
 
173 / 429 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Столкнулся с этой же проблемой при настройке прав в Ax2009. Новая система AOSAuthorization работает нелепо на мой взгляд. Если у таблицы настроено это свойство, то настройку прав приходится делать извращенными способами... Открывать доступ на корневые ключи безопасности (CustTables например) и закрывать доступ на все оставшиеся таблицы с этим корневым ключем. Что не правильно в корне. При появлении каждой новой таблицы с этим ключем придется перестраивать права всем группам пользователей.

Таким образом настраивать права не правильно.

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

Последний раз редактировалось someOne; 30.10.2010 в 14:27.
За это сообщение автора поблагодарили: EfimV (1).
Старый 01.11.2010, 09:37   #3  
PavelX is offline
PavelX
MCTS
MCBMSS
 
46 / 97 (4) ++++
Регистрация: 08.09.2006
Адрес: Красноярск
Возможно это не совсем применимо к Вашей задаче, но вот тут рекомендуют не менять свойство на таблице, а для кода, изменяющего записи в таблицах, использовать оператор
X++:
unchecked
внутри которого проверку прав доступа можно отключить.
За это сообщение автора поблагодарили: EfimV (1).
Старый 29.11.2010, 18:40   #4  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Подниму старую тему.

Проблема с "постированием" журнала. Стандартный код вылетает вот именна на такой проверке "без прав" дать права

Показывает стэк.. пишет что не пожат вызвать ф-ю "неаопределённо" на клиенте...
В другой аппликации тото же самый код работает

X++:
static boolean LedgerParamaters::checkDuplicate(Voucher _voucher, TransDate _transDate)
// </GEEU>
{
    LedgerTrans         ledgerTrans;
    TransDate           fromDate;
    TransDate           toDate;
    ReuseVoucher        reuseVoucher = LedgerParameters::find().CheckVoucher;
    boolean             ret;
    ;

    ret = true;

    if (reuseVoucher != ReuseVoucher::AcceptDuplicate)
    {
        unchecked(Uncheck::TableSecurityPermission)  <<<<<<---------------------------- ,   
        {
            ledgerTrans = LedgerTrans::findVoucher(_voucher);
        }
        if (ledgerTrans)
Закоментил код и все запостилось...

Последний раз редактировалось Delfins; 29.11.2010 в 18:46.
Старый 29.11.2010, 21:08   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Вы бы показали весь стек вызовов что ли Есть версия, что ключевая фраза тут - "вызвать на клиенте": в 2009-й (да и в 4-ке) ядро очень ревностно относится к тому, чтобы часть операций выполнялась строго на сервере (к примеру, те же прямые SQL-запросы), так что, вероятно, и отключение проверки AOSAuthorization тоже можно выполнять лишь в серверном коде. Было бы интересно понять, почему указанный кусок кода в вашем случае выполняется на клиенте - может, модификации какие вмешались, потому что штатно разноска журналов ГК выполняется на сервере. Может, у вас какой-нить свой пункт меню для запуска разноски, у которого не выставлено по-нормальному свойство RunOn.

PS. А комментировать отключение проверки не стоит - рискуете сломать разноску там, где она штатно работает...

Последний раз редактировалось gl00mie; 29.11.2010 в 21:11.
Старый 30.11.2010, 10:57   #6  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Ну на меню-итем поставлен "Сервер", классу указан "Где вызвано"

X++:
[c]    \Data Dictionary\Tables\LedgerParameters\Methods\checkDuplicate                                        20
[c]    \Classes\LedgerVoucherTransObject\check                                                               172
[c]    \Classes\LedgerVoucherTransObject\checkData                                                            55
[c]    \Classes\LedgerVoucherObject\checkTransactions                                                         29
[c]    \Classes\LedgerVoucherObject\check                                                                     22
[s]    \Classes\LedgerVoucher\check                                                                           17
[s]    \Classes\LedgerVoucher\post                                                                            32
[s]    \Classes\LedgerVoucherPost\end                                                                          4
[c]    \Classes\JournalCheckPostLedger\postVoucher                                                            21
[c]    \Classes\JournalCheckPostLedger\postJournal                                                            13
[c]    \Classes\JournalCheckPost\runPost                                                                       6
Странно, что это только на одном сервере. На другом сервер/апликации, но код почти тот же самый (по моему 99.9%) для этого процесса и всё работает.
Это может какой параметр или глюк ?

Последний раз редактировалось Delfins; 30.11.2010 в 11:06.
Старый 30.11.2010, 13:28   #7  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Это, видимо, не весь стек. Самое главное - откуда шел исходный вызов, а именно этой части нет.
Старый 30.11.2010, 17:13   #8  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
А понял... в трассировке указан где код исполняется, и на checkDuplicate стоит "с"
Может методу просто поставить "public server static void/boolean checkDuplicate(..." ?

Последний раз редактировалось Delfins; 30.11.2010 в 17:21.
Старый 30.11.2010, 17:28   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Это лишь верхушка айсберга, таких методов в ходе разноски журналов ГК могут вызываться десятки и сотни. Тут основная причина (если не рассматривать "странную" обработку AOSAuthorization ядром) в том, что код разноски стартует на клиенте, а не на сервере.
Старый 30.11.2010, 20:59   #10  
Delfins is offline
Delfins
Участник
 
320 / 39 (2) +++
Регистрация: 20.09.2005
Адрес: Riga, Latvia
Кстате, у вас такой же код?

X++:
/* <SYS>
static server boolean checkDuplicate(Voucher _voucher, TransDate _transDate)
</SYS> */

// <GEEU>
static boolean checkDuplicate(Voucher _voucher, TransDate _transDate)
// </GEEU>
{
Попробую поковырятся маленько..
Аххх... опять ложная тревога. Классу непоставилось Called_From, то ли при вылете снялось или не тому классу прежде ставил. Расширеному класу ХХХJournalCheckPost помогло. Спасибо.

Последний раз редактировалось Delfins; 30.11.2010 в 21:05.
Старый 04.04.2011, 14:12   #11  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
А у меня вот такой стэк получился:
X++:
[c]    \Data Dictionary\Tables\LedgerParameters\Methods\checkDuplicate                                        20
[c]    \Classes\LedgerVoucherTransObject\check                                                               172
[c]    \Classes\LedgerVoucherTransObject\checkData                                                            55
[c]    \Classes\LedgerVoucherObject\checkTransactions                                                         29
[c]    \Classes\LedgerVoucherObject\check                                                                     22
[s]    \Classes\LedgerVoucher\check                                                                           17
[s]    \Classes\LedgerVoucher\post                                                                            32
[s]    \Classes\LedgerVoucherPost\end                                                                          4
[c]    \Classes\CustomJournalPost_RU\run                                                                      48
[c]    \Classes\CustomJournalGTDCreate_RU\postGTD                                                              9
[c]    \Classes\CustomJournalGTDCreate_RU\run                                                                162
[c]    \Classes\CustomJournalGTDBase_RU\main                                                                  22
Здесь проблема с классом CustomJournalGTDBase_RU ? То есть он должен исполняться на сервере ?
__________________
Дмитрий
Старый 04.04.2011, 18:05   #12  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Да, проблема с этим классом, но исполняться на сервере должна лишь его часть, касающаяся разноски: у него есть метод-обработчик fld4_1_modified(), который по-моему не будет вызываться, если во время работы диалога класс будет работать на сервере, т.е. он должен уметь переключаться с сервера на клиента, для чего у него следует оставить RunOn = Called From, но поменять свойство соотв. пункта меню, чтобы класс стартовал на сервере и затем там же выполнялся после закрытия диалога. Правда, придется еще научить класс паковать параметры, вводимые через диалоговую форму.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Права доступа Группы пользователей к таблице ta_and DAX: Администрирование 2 19.01.2009 15:19
Права группы пользователей Apollon33 DAX: Администрирование 8 17.01.2008 14:16
Права групп пользователей Manner DAX: Администрирование 5 03.10.2006 17:16
stack overflow: права групп пользователей artem DAX: Администрирование 4 06.08.2002 18:49

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:45.