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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.02.2007, 11:12   #1  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
уровень доступа на форму
Всем привет.

У меня следующий вопрос. Как программно узнать уровень доступа, который пользователь имеет на форму или на таблицу на форме?
Старый 14.02.2007, 11:40   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Pavel Pustovalov Посмотреть сообщение
Всем привет.

У меня следующий вопрос. Как программно узнать уровень доступа, который пользователь имеет на форму или на таблицу на форме?
1.
У формы нет ограничений на доступ.
Ограничения на доступ есть у menuItem.

2.
У таблицы, поля, menuitem есть свойство securityKey

3.
Управлять правами можно при помощ класса SecurityKeySet
__________________
полезное на axForum, github, vk, coub.
Старый 14.02.2007, 11:43   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Доступ не на форму - а на контролы, или на пункт меню. и на таблицы.
Узнать можно пробовать, к примеру, так:
X++:
    SysDictTable    dictTable = new SysDictTable(tableNum(CustTable));
    ;
    print hasMenuItemAccess(menuItemDisplayStr(CustTable), MenuItemType::Display);
    print hasSecurityKeyAccess(dictTable.securityKeyId(), AccessType::View);
    pause;
Есть еще системный класс KERNDOC://Classes/SecurityKeySet

P.S. Упс. Маззи уже ответил
За это сообщение автора поблагодарили: mazzy (5).
Старый 14.02.2007, 11:44   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Самый простой способ - ройте в сторону:
X++:
global::hasMenuItemSecurityAccess()
global::hasMenuItemAccess(
с Уважением,
Георгий
Старый 14.02.2007, 11:45   #5  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
Например по ключу доступа на пункт меню для формы или на таблице:
метод из Global:
static boolean hasSecuritykeyAccess(SecurityKeyId SecurityKeyId, AccessType neededAccessLevel)
{
return new DictSecurityKey(SecurityKeyId).rights() >= neededAccessLevel;
}


new DictSecurityKey(SecurityKeyId).rights() - скажет какой уровень оступа есть у текущего пользователя для ключа SecurityKeyId
SecurityKeyId - можно получить если Вы знаете название ключа securityKeyNum(....);

ключ на таблице можно получить через класс dictTable
Старый 14.02.2007, 11:56   #6  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Всем спасибо за советы. Про класс SecurityKeySet - не знал, покопаюсь.

Хотелось бы вот так: есть два menuItem с разными SecurityKey на одну и ту же форму с таблицей Table1. Насколько я понимаю права на доступ к таблице в этой форме будут как пересечение прав на SecurityKey таблицы и SecurityKey для MenuItem открывшего форму (поправьте если ошибаюсь).
Ну вот, в фоме скажем в методе init я хочу узнать какие же права есть у пользователя на эту таблицу. Аксапта же это определяет до открытия формы, т.е. делать то что она уже сделала не хочется, хочется просто получить результат ее вычислений.

Последний раз редактировалось Pavel Pustovalov; 14.02.2007 в 11:59.
Старый 14.02.2007, 12:03   #7  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Сообщение от George Nordic Посмотреть сообщение
Самый простой способ - ройте в сторону:
X++:
global::hasMenuItemSecurityAccess()
Георгий, у меня нет в классе Global ткой функции. У меня Axapta 3.0 CIS SP3
Старый 14.02.2007, 12:23   #8  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Там есть просто hasSecuritykeyAccess. Думаю Георгий просто написал по пямяти и немного ошибся.
Старый 14.02.2007, 12:26   #9  
Jony is offline
Jony
Участник
 
99 / 22 (1) +++
Регистрация: 25.06.2003
Адрес: г. Барнаул
Ax30 Sp3 -
есть в Global
static public boolean hasMenuItemAccess(MenuName name, MenuItemType type)
Старый 14.02.2007, 12:27   #10  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Сообщение от oip Посмотреть сообщение
Там есть просто hasSecuritykeyAccess. Думаю Георгий просто написал по пямяти и немного ошибся.
Мне тоже так кажется. А еще предложения есть, по уточненному вопросу?
Старый 14.02.2007, 12:33   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Pavel Pustovalov Посмотреть сообщение
Ну вот, в фоме скажем в методе init я хочу узнать какие же права есть у пользователя на эту таблицу.
Боже! Что ж вы делаете, интересно? Это-ж закат солнца вручную.

Смотрите в форму SysUserSecurity или SysUserGroupSecurity
Эта форма показывает дерево с правами на каждый элемент меню, формы, отчета.

Можно спросить ради интереса? вы сделали какую-то универсальную штуку, которая автоматически создает колонки и показывает данные, а теперь думаете как к этой универсальной штуке прикрутить права доступа?
__________________
полезное на axForum, github, vk, coub.
Старый 14.02.2007, 12:51   #12  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Сообщение от mazzy Посмотреть сообщение
Боже! Что ж вы делаете, интересно? Это-ж закат солнца вручную.

Смотрите в форму SysUserSecurity или SysUserGroupSecurity
Эта форма показывает дерево с правами на каждый элемент меню, формы, отчета.

Можно спросить ради интереса? вы сделали какую-то универсальную штуку, которая автоматически создает колонки и показывает данные, а теперь думаете как к этой универсальной штуке прикрутить права доступа?
Ну и фантазия у Вас mazzy.
На самом деле все более прозаично.

При открытии формы я должен узнать имеет ли право пользователь удалять записи в таблицы или нет и в зависимости от результата делать соответствующие ограничения. На самом деле и MenuItem - один, но мне просто стало интересно что если их два или больше, то как узнать каким открылась форма. И опять же повторюсь права на таблицу на форме - пересечение прав на MenuItem и на таблицу. Самому строить пересечение мне не хочется, Аксапта же это делает сама, вот я и хотел как-то взять информацию об этом из формы.
Старый 14.02.2007, 13:07   #13  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Сообщение от oip Посмотреть сообщение
Там есть просто hasSecuritykeyAccess. Думаю Георгий просто написал по пямяти и немного ошибся.
Не совсем. В 4ке - есть. А я по4ке как раз проверял.
Старый 14.02.2007, 13:10   #14  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Права на таблицу проверяются через

Global::isTableUserEnabled()

Однако еще есть RLS. И на форме доступ к данным м.б. меньше, чем на таблицу вообще ( <трам-пам-пам>_ds.allowEdit() ). Более того, последняя фигня на форме может "менять окраску" как хамелеон, если начать прыгать по записям. Не говоря о том, что еще бывает .allowCreate() и .allowDelete().

В общем, с очень высокой вероятностью задача у вас поставлена неправильно.
__________________
С уважением,
glibs®
За это сообщение автора поблагодарили: mazzy (5).
Старый 14.02.2007, 13:13   #15  
zinius is offline
zinius
Участник
 
24 / 11 (1) +
Регистрация: 26.01.2005
2Pavel Pustovalov
Дык ограничения на удаления записей задаются для групп пользователей, т.е. настройкой. Зачем отработку нужно ручками прописывать в форме?
Старый 14.02.2007, 13:15   #16  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от glibs Посмотреть сообщение
В общем, с очень высокой вероятностью задача у вас поставлена неправильно.
+1, как говорится. "Соответствующие ограничения" лучше делать обыкновенной настройкой прав или исходя из доступа к какому-то ключу. А не исходя из "имеет ли право пользователь удалять записи в таблицы или нет".

Последний раз редактировалось oip; 14.02.2007 в 13:45. Причина: Сначала плохо выразился.
Старый 14.02.2007, 13:23   #17  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Pavel Pustovalov Посмотреть сообщение
На самом деле и MenuItem - один, но мне просто стало интересно что если их два или больше, то как узнать каким открылась форма.
element.args().menuItemName() вернет имя МенюАйтема, а element.args().menuItemType() - тип. Вроде как.
Старый 14.02.2007, 13:46   #18  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Сообщение от glibs Посмотреть сообщение
Права на таблицу проверяются через

Global::isTableUserEnabled()

Однако еще есть RLS. И на форме доступ к данным м.б. меньше, чем на таблицу вообще ( <трам-пам-пам>_ds.allowEdit() ). Более того, последняя фигня на форме может "менять окраску" как хамелеон, если начать прыгать по записям. Не говоря о том, что еще бывает .allowCreate() и .allowDelete().

В общем, с очень высокой вероятностью задача у вас поставлена неправильно.
Это я все понимаю. Дальнейшие настройки через форму и RLS меня не интересует. Интересует именно права доступа на таблицу на форме
Старый 14.02.2007, 13:53   #19  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Сообщение от zinius Посмотреть сообщение
2Pavel Pustovalov
Дык ограничения на удаления записей задаются для групп пользователей, т.е. настройкой. Зачем отработку нужно ручками прописывать в форме?
К сожалению правами не получается. Объясню тогда полностью ситуацию.
Если у пользователя есть права на создание записи в таблице на форме, то ему нужно запретить редактирование этой форме. Дело в том, что нужно в момент создания вызывать свою форму, т.е. либо по кнопке на панели инструментов, либо по нажатию Ctrl+N. А если у него есть полный доступ (на удаление), то форму не вызывать и делать обычные дествия при этом.
Чтобы он мог срабатывал метод create нужно чтобы были права на создание в таблице, но если есть на создание то есть и на редактирование. Вот и хотим отловить: если есть права на создание, а на удаление - нет, то запретить редактирование на форме. Примерно так. Может у кого другие соображения появятся.
Старый 14.02.2007, 14:01   #20  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
может проще попробовать эти все действия проводить, анализируя
X++:
table_ds.allowCreate(), allowDelete(), allowEdit()?
тут уж система права раздает + то, что навешено на сам источник.
Теги
faq, безопасность, права доступа

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Организация доступа внешних веб-пользователей к DAX 4.0 alex55 DAX: Администрирование 1 07.06.2009 17:48
Расширение возможностей стандартных прав доступа Stainless DAX: Программирование 2 19.06.2008 10:36
Экспорт/Импорт прав доступа Anais DAX: Администрирование 28 11.11.2006 21:44
Смена доступа на таблицу в конкретной форме Perc DAX: Программирование 5 05.11.2006 23:08
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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