28.10.2010, 23:02 | #1 |
Участник
|
AOSAuthorization и права пользователей
DAX2009,ru5
Выдаю пользователю права на таблицы. Если у таблицы не задано свойство AOSAuthorization то всё в порядке. Если задано (например LedgerTrans – “Проводки ГК”), то указание доступа на конкретную таблицу недостаточно. Требуется, чтобы был задан доступ на уровне «Таблицы» см. рисунок. (В явном виде задан доступ к securityKey, закрывающему таблицу) Если я в окне формы задаю доступ на уровне «Таблицы», то «открываются» все таблицы из списка. И приходится все их прощёлкать и забрать доступ обратно. При этом в большом количестве множатся записи в таблице AccessRightsList. Если раньше была запись только на таблицу, к которой разрешен доступ, то сейчас указываются все таблицы. В том числе, к которым доступ запрещён. Вопрос. Как можно задать доступ к таблице у которой задано свойство AOSAuthorization без того чтобы не пощелкивать все таблицы из списка и не забирать доступ обратно? Может это делается как то более правильно? |
|
30.10.2010, 14:25 | #2 |
Участник
|
Столкнулся с этой же проблемой при настройке прав в Ax2009. Новая система AOSAuthorization работает нелепо на мой взгляд. Если у таблицы настроено это свойство, то настройку прав приходится делать извращенными способами... Открывать доступ на корневые ключи безопасности (CustTables например) и закрывать доступ на все оставшиеся таблицы с этим корневым ключем. Что не правильно в корне. При появлении каждой новой таблицы с этим ключем придется перестраивать права всем группам пользователей.
Таким образом настраивать права не правильно. Для себя решил проблему так - отключил это свойство во во всех проблемных таблицах. Думаю, вряд ли это вызовет серьезные проблемы. Последний раз редактировалось someOne; 30.10.2010 в 14:27. |
|
|
За это сообщение автора поблагодарили: EfimV (1). |
01.11.2010, 09:37 | #3 |
MCTS
|
Возможно это не совсем применимо к Вашей задаче, но вот тут рекомендуют не менять свойство на таблице, а для кода, изменяющего записи в таблицах, использовать оператор
X++: unchecked |
|
|
За это сообщение автора поблагодарили: EfimV (1). |
29.11.2010, 18:40 | #4 |
Участник
|
Подниму старую тему.
Проблема с "постированием" журнала. Стандартный код вылетает вот именна на такой проверке "без прав" дать права Показывает стэк.. пишет что не пожат вызвать ф-ю "неаопределённо" на клиенте... В другой аппликации тото же самый код работает 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 |
Участник
|
Вы бы показали весь стек вызовов что ли Есть версия, что ключевая фраза тут - "вызвать на клиенте": в 2009-й (да и в 4-ке) ядро очень ревностно относится к тому, чтобы часть операций выполнялась строго на сервере (к примеру, те же прямые SQL-запросы), так что, вероятно, и отключение проверки AOSAuthorization тоже можно выполнять лишь в серверном коде. Было бы интересно понять, почему указанный кусок кода в вашем случае выполняется на клиенте - может, модификации какие вмешались, потому что штатно разноска журналов ГК выполняется на сервере. Может, у вас какой-нить свой пункт меню для запуска разноски, у которого не выставлено по-нормальному свойство RunOn.
PS. А комментировать отключение проверки не стоит - рискуете сломать разноску там, где она штатно работает... Последний раз редактировалось gl00mie; 29.11.2010 в 21:11. |
|
30.11.2010, 10:57 | #6 |
Участник
|
Ну на меню-итем поставлен "Сервер", классу указан "Где вызвано"
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 Это может какой параметр или глюк ? Последний раз редактировалось Delfins; 30.11.2010 в 11:06. |
|
30.11.2010, 13:28 | #7 |
----------------
|
Это, видимо, не весь стек. Самое главное - откуда шел исходный вызов, а именно этой части нет.
|
|
30.11.2010, 17:13 | #8 |
Участник
|
А понял... в трассировке указан где код исполняется, и на checkDuplicate стоит "с"
Может методу просто поставить "public server static void/boolean checkDuplicate(..." ? Последний раз редактировалось Delfins; 30.11.2010 в 17:21. |
|
30.11.2010, 17:28 | #9 |
Участник
|
Это лишь верхушка айсберга, таких методов в ходе разноски журналов ГК могут вызываться десятки и сотни. Тут основная причина (если не рассматривать "странную" обработку AOSAuthorization ядром) в том, что код разноски стартует на клиенте, а не на сервере.
|
|
30.11.2010, 20:59 | #10 |
Участник
|
Кстате, у вас такой же код?
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 |
Участник
|
А у меня вот такой стэк получился:
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
__________________
Дмитрий |
|
04.04.2011, 18:05 | #12 |
Участник
|
Да, проблема с этим классом, но исполняться на сервере должна лишь его часть, касающаяся разноски: у него есть метод-обработчик fld4_1_modified(), который по-моему не будет вызываться, если во время работы диалога класс будет работать на сервере, т.е. он должен уметь переключаться с сервера на клиента, для чего у него следует оставить RunOn = Called From, но поменять свойство соотв. пункта меню, чтобы класс стартовал на сервере и затем там же выполнялся после закрытия диалога. Правда, придется еще научить класс паковать параметры, вводимые через диалоговую форму.
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
Права доступа Группы пользователей к таблице | 2 | |||
Права группы пользователей | 8 | |||
Права групп пользователей | 5 | |||
stack overflow: права групп пользователей | 4 |
|