|  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 | |||
| 
 |