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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.04.2011, 15:55   #1  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2161 (81) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от someOne Посмотреть сообщение
В этом случае как раз права на таблицу xRefTableRelation ничего не дадут.
Даже если вы откроете права на эту таблицу то при попытке пользователем открыть диалог добавления таблицы в источник данных получите сообщение как показано ниже. Поэтому решить проблему может лишь открытие права целиком на ключ SysDevelopmentTables, либо отключение свойства AOSAuthorization таблицы xRefTableRelation с CreateReadUpdateDelete на None. Это сделано. И этого не достаточно.

Проверил еще раз на НЕ модифицированном приложении ax2009 ru6
Не понял =). Если прав на таблицу xRefTableRelation нету - то все ок, а если есть - то выдается ошибка??

И по логике, и по факту на моей модифицированной, но не в части прав AX, всё наоборот - если прав на эту таблицу нет (не на ключ, а на таблицу), то ошибка выдается. Если права дать - то всё работает.

Как-то уж очень по-разному ведет себя аксапта в наших инсталляциях. Надо проверить у кого-то еще!
__________________
Ivanhoe as is..
Старый 20.04.2011, 18:11   #2  
someOne is offline
someOne
Участник
Аватар для someOne
 
174 / 432 (15) +++++++
Регистрация: 11.12.2008
Адрес: Москва
Цитата:
Сообщение от Ivanhoe Посмотреть сообщение
Не понял =). Если прав на таблицу xRefTableRelation нету - то все ок, а если есть - то выдается ошибка??

И по логике, и по факту на моей модифицированной, но не в части прав AX, всё наоборот - если прав на эту таблицу нет (не на ключ, а на таблицу), то ошибка выдается. Если права дать - то всё работает.

Как-то уж очень по-разному ведет себя аксапта в наших инсталляциях. Надо проверить у кого-то еще!
Видимо я выразился не слишком ясно.

Суть того, что я хотел сообщить, в следующем:
1. Права на таблицу xRefTableRelation, конечно же есть. Если бы их не было - то выдавалась бы ошибка о том что нет доступа (которую я привел), а не выдавался бы список "пусто" на сером фоне.

2. Этих прав (на таблицу xRefTableRelation) не достаточно. Для того чтобы в списке появились необходимые таблицы - приходится открывать пользователю права на ключи таблиц. Если этого не делать - в списке отображаются только таблицы БЕЗ ключей


Не поленился разобраться, в чем же "засада".

Все дело в методе класса
\Classes\SysQueryBuilder\buildRelations
Там есть такой метод, который определяет "доступна" ли таблица данному пользователю

Если на таблице есть какой нибудь ключ безопасности, и у пользователя нет прав на этот ключ, (хотя и есть право на объект (таблицу)) то при запуске проверка возвращает "false", поэтому таблицы и не отражаются пользователю.

X++:
private static client server Map buildRelations(Map _map, SysDictTable _orgDictTable, TableName _tableName, RelationName _relationName)
.....
    if (dictTable &&
        dictTable.rights() > AccessType::NoAccess &&
        !dictTable.isTmp())
    {

Особенность в том что в случае запуска на стороне сервера и на стороне клиента (у меня по крайней мере) он возвращает разные значения!!!

Вот пример. Проверьте у себя разве он у вас работает не так ?
X++:
static void test(Args _args)
{
    SysDictTable    DictTable;
    ;
  
    dictTable   = new SysDictTable(tablename2id("SalesLine"));

    if (dictTable.rights() > AccessType::NoAccess)
    {
        info("true");
    }
    else
    {
        info("fasle");
    }
}
Если на таблице есть какой нибудь ключ безопасности, и у пользователя нет прав на этот ключ, но есть право на объект (таблицу), то при запуске на стороне сервера пример вернет "false", а при запуске на клиенте - "true"

В этом кажется, и есть проблема.

Интересно, каким образом в вашем случае пользователю отображены табличные связи ? Неужели в вашем случае этот метод работает иначе ???

Кстати проблема решается если в классе SysQueryBuilder вместо
private static server container findRelations(tableId _tableId)
написать
private static client container findRelations(tableId _tableId)

Последний раз редактировалось someOne; 20.04.2011 в 18:21.
За это сообщение автора поблагодарили: Ivanhoe (3).
Старый 20.04.2011, 20:45   #3  
Ivanhoe is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2161 (81) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от someOne Посмотреть сообщение
Если на таблице есть какой нибудь ключ безопасности, и у пользователя нет прав на этот ключ, (хотя и есть право на объект (таблицу)) то при запуске проверка возвращает "false"
Почему сделан такой вывод? =) Так должно быть согласно документации? По мне (я не программист, могу и заблуждаться), dictTable.rights() должен возвращать доступ к объекту, а не его ключу. Ведь проверка на доступ к ключу обычно делается по-другому.

Цитата:
Сообщение от someOne Посмотреть сообщение
Особенность в том что в случае запуска на стороне сервера и на стороне клиента (у меня по крайней мере) он возвращает разные значения!!!

Вот пример. Проверьте у себя разве он у вас работает не так ?

Если на таблице есть какой нибудь ключ безопасности, и у пользователя нет прав на этот ключ, но есть право на объект (таблицу), то при запуске на стороне сервера пример вернет "false", а при запуске на клиенте - "true"

Интересно, каким образом в вашем случае пользователю отображены табличные связи ? Неужели в вашем случае этот метод работает иначе ???
У меня в дебагере стоит значек "сервера" напротив метода \Classes\SysQueryBuilder\buildRelations - значит выполняется на сервере? Джоб запускал и напрямую, и через меню айтем с запуском на сервере - в обоих случаях возвращает true.

Явно же барабашки нет? ) Не знаю, важно это или нет, но клиент стоит на самом сервере АОС.
__________________
Ivanhoe as is..
Теги
ax2009, security, securitykey, как правильно, права доступа

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как правильно хранить статичный набор начальных данных в классах? mazzy DAX: Программирование 58 14.04.2011 12:10
зачем в dax2009 запретили создавать новые партии и серийники по строке журнала спецификации ? Logger DAX: Функционал 3 05.01.2011 19:18
Префиксы-суффиксы. Какой инструмент лучше использовать чтобы избавиться от префиксов? mazzy DAX: Программирование 48 28.10.2010 10:54
aEremenko: Как правильно подобрать оборудование и понять, сколько оно будет стоить? Blog bot DAX Blogs 0 17.04.2007 12:00
как правильно использовать not like polygris DAX: Программирование 1 06.05.2006 16:59

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

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

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