|
14.02.2007, 11:12 | #1 |
Участник
|
уровень доступа на форму
Всем привет.
У меня следующий вопрос. Как программно узнать уровень доступа, который пользователь имеет на форму или на таблицу на форме? |
|
14.02.2007, 11:40 | #2 |
Участник
|
Цитата:
У формы нет ограничений на доступ. Ограничения на доступ есть у menuItem. 2. У таблицы, поля, menuitem есть свойство securityKey 3. Управлять правами можно при помощ класса SecurityKeySet |
|
14.02.2007, 11:43 | #3 |
Участник
|
Доступ не на форму - а на контролы, или на пункт меню. и на таблицы.
Узнать можно пробовать, к примеру, так: X++: SysDictTable dictTable = new SysDictTable(tableNum(CustTable)); ; print hasMenuItemAccess(menuItemDisplayStr(CustTable), MenuItemType::Display); print hasSecurityKeyAccess(dictTable.securityKeyId(), AccessType::View); pause; P.S. Упс. Маззи уже ответил |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
14.02.2007, 11:44 | #4 |
Модератор
|
Самый простой способ - ройте в сторону:
X++: global::hasMenuItemSecurityAccess() global::hasMenuItemAccess( Георгий |
|
14.02.2007, 12:03 | #5 |
Участник
|
|
|
14.02.2007, 11:45 | #6 |
Участник
|
Например по ключу доступа на пункт меню для формы или на таблице:
метод из 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 | #7 |
Участник
|
Всем спасибо за советы. Про класс SecurityKeySet - не знал, покопаюсь.
Хотелось бы вот так: есть два menuItem с разными SecurityKey на одну и ту же форму с таблицей Table1. Насколько я понимаю права на доступ к таблице в этой форме будут как пересечение прав на SecurityKey таблицы и SecurityKey для MenuItem открывшего форму (поправьте если ошибаюсь). Ну вот, в фоме скажем в методе init я хочу узнать какие же права есть у пользователя на эту таблицу. Аксапта же это определяет до открытия формы, т.е. делать то что она уже сделала не хочется, хочется просто получить результат ее вычислений. Последний раз редактировалось Pavel Pustovalov; 14.02.2007 в 11:59. |
|
14.02.2007, 12:33 | #8 |
Участник
|
Цитата:
Смотрите в форму SysUserSecurity или SysUserGroupSecurity Эта форма показывает дерево с правами на каждый элемент меню, формы, отчета. Можно спросить ради интереса? вы сделали какую-то универсальную штуку, которая автоматически создает колонки и показывает данные, а теперь думаете как к этой универсальной штуке прикрутить права доступа? |
|
14.02.2007, 12:51 | #9 |
Участник
|
Цитата:
Сообщение от mazzy
Боже! Что ж вы делаете, интересно? Это-ж закат солнца вручную.
Смотрите в форму SysUserSecurity или SysUserGroupSecurity Эта форма показывает дерево с правами на каждый элемент меню, формы, отчета. Можно спросить ради интереса? вы сделали какую-то универсальную штуку, которая автоматически создает колонки и показывает данные, а теперь думаете как к этой универсальной штуке прикрутить права доступа? На самом деле все более прозаично. При открытии формы я должен узнать имеет ли право пользователь удалять записи в таблицы или нет и в зависимости от результата делать соответствующие ограничения. На самом деле и MenuItem - один, но мне просто стало интересно что если их два или больше, то как узнать каким открылась форма. И опять же повторюсь права на таблицу на форме - пересечение прав на MenuItem и на таблицу. Самому строить пересечение мне не хочется, Аксапта же это делает сама, вот я и хотел как-то взять информацию об этом из формы. |
|
14.02.2007, 13:23 | #10 |
Axapta
|
|
|
15.02.2007, 00:25 | #11 |
NavAx
|
Цитата:
Сообщение от Pavel Pustovalov
На самом деле все более прозаично.
При открытии формы я должен узнать имеет ли право пользователь удалять записи в таблицы или нет и в зависимости от результата делать соответствующие ограничения. На самом деле и MenuItem - один, но мне просто стало интересно что если их два или больше, то как узнать каким открылась форма. И опять же повторюсь права на таблицу на форме - пересечение прав на MenuItem и на таблицу. Самому строить пересечение мне не хочется, Аксапта же это делает сама, вот я и хотел как-то взять информацию об этом из формы. 1. создать ключ безопасности "Запретить то то и там то" 2. в нужном месте проверить какой доступ к этому ключу у пользователя и разрешить/запретить что надо при этом можно тоньше ограничивать пользователя. например разрешить полный домтуп к заказам типа Заказ и только чтение к заказам типа Контракт. Последний раз редактировалось raz; 15.02.2007 в 00:30. |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
14.02.2007, 12:23 | #12 |
Axapta
|
Там есть просто hasSecuritykeyAccess. Думаю Георгий просто написал по пямяти и немного ошибся.
|
|
14.02.2007, 12:27 | #13 |
Участник
|
|
|
14.02.2007, 13:07 | #14 |
Модератор
|
|
|
14.02.2007, 12:26 | #15 |
Участник
|
Ax30 Sp3 -
есть в Global static public boolean hasMenuItemAccess(MenuName name, MenuItemType type) |
|
14.02.2007, 13:10 | #16 |
Member
|
Права на таблицу проверяются через
Global::isTableUserEnabled() Однако еще есть RLS. И на форме доступ к данным м.б. меньше, чем на таблицу вообще ( <трам-пам-пам>_ds.allowEdit() ). Более того, последняя фигня на форме может "менять окраску" как хамелеон, если начать прыгать по записям. Не говоря о том, что еще бывает .allowCreate() и .allowDelete(). В общем, с очень высокой вероятностью задача у вас поставлена неправильно.
__________________
С уважением, glibs® |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
14.02.2007, 13:13 | #17 |
Участник
|
2Pavel Pustovalov
Дык ограничения на удаления записей задаются для групп пользователей, т.е. настройкой. Зачем отработку нужно ручками прописывать в форме? |
|
14.02.2007, 13:53 | #18 |
Участник
|
Цитата:
Если у пользователя есть права на создание записи в таблице на форме, то ему нужно запретить редактирование этой форме. Дело в том, что нужно в момент создания вызывать свою форму, т.е. либо по кнопке на панели инструментов, либо по нажатию Ctrl+N. А если у него есть полный доступ (на удаление), то форму не вызывать и делать обычные дествия при этом. Чтобы он мог срабатывал метод create нужно чтобы были права на создание в таблице, но если есть на создание то есть и на редактирование. Вот и хотим отловить: если есть права на создание, а на удаление - нет, то запретить редактирование на форме. Примерно так. Может у кого другие соображения появятся. |
|
14.02.2007, 13:15 | #19 |
Axapta
|
+1, как говорится. "Соответствующие ограничения" лучше делать обыкновенной настройкой прав или исходя из доступа к какому-то ключу. А не исходя из "имеет ли право пользователь удалять записи в таблицы или нет".
Последний раз редактировалось oip; 14.02.2007 в 13:45. Причина: Сначала плохо выразился. |
|
14.02.2007, 13:46 | #20 |
Участник
|
Цитата:
Сообщение от glibs
Права на таблицу проверяются через
Global::isTableUserEnabled() Однако еще есть RLS. И на форме доступ к данным м.б. меньше, чем на таблицу вообще ( <трам-пам-пам>_ds.allowEdit() ). Более того, последняя фигня на форме может "менять окраску" как хамелеон, если начать прыгать по записям. Не говоря о том, что еще бывает .allowCreate() и .allowDelete(). В общем, с очень высокой вероятностью задача у вас поставлена неправильно. |
|