27.09.2021, 10:30 | #1 |
Участник
|
вопрос про логику работы accessRightsList
Привет.
Подскажите логику работы таблицы accessRightsList. Если я создал элемент menuitem с названием пусть MyMenuItem , поместил его в Мenu + присвоил ему СonfigurationKey / SecurityKey. То после этого я думал данный элемент появится в accessRightsList, но его там не оказалось. Проверил, обнаружил что доступ к данному пункту MyMenuItem появился только у двух групп доступа. Вопрос 1. подскажите по какой логике Аксапта решила дать доступ к этому MyMenuItem только этим двум группам? Почему не всем? Если я допустим исправил доступ. У этих двух групп убрал доступ и третьей группе (новой) дал доступ. В таблице accessRightsList теперь появились записи, где elementName = 'MyMenuItem' а уровень доступа соответствует тому чему я указал вручную. Вопрос 2. Существует ли AX класс для работе c таблицей accessRightsList ? В котором уже заложена логика (исходя из того для какого элемента я хочу установить права) в каких случаях добавлять в таблицу в каких обновлять а в каких удалять записи оттуда. Последний раз редактировалось oleggy; 27.09.2021 в 11:18. |
|
27.09.2021, 13:45 | #2 |
Участник
|
Там используется наследование.
Поэтому если вы дали доступ на SecurityKey то доступ на зависимые от него объекты в этой табличке может быть не прописан. Как правило он прописывается когда доступ отличается. т.е. система как бы экономит число записей, не делает их если через наследование и так понятно какие права будут. |
|
28.09.2021, 10:30 | #3 |
Участник
|
Подскажите еще:
1. А СonfigurationKey получается никак не влияет? Заметил что у accessRightsList только поле SecurityKey есть. Просто до конца не разобрался с логикой. 2. Как можно узнать id по текстовому имени SecurityKey ? 3. Как можно перебрать все MenuItem, можете пример кода сбросить? |
|
28.09.2021, 11:19 | #4 |
NavAx
|
|
|
|
За это сообщение автора поблагодарили: dech (10). |
28.09.2021, 14:44 | #5 |
Участник
|
Сложно представить ситуацию, при которой это может понадобится, обратная операция еще может встречаться.
Но если уж очень нужно, то можно перебрать все существующие и сравнивать с нужной строкой. Хотя сколько это будет выполняться другой вопрос. Что-то типа (естественно, не проверял): X++: Dictionary dictionary = new Dictionary(); DictSecurityKey dictSecurityKey; for (idx=dictionary.securityKeyCnt(); i; i--) { dictSecurityKey = new DictSecurityKey(dictionary.securityKeyCnt2Id(i)); dictSecurityKey .name() == 'Нечто' X++: securityKeyNum(LedgerTables) X++: new Dictionary().securityKeyName2Id(elemName); Последний раз редактировалось Raven Melancholic; 28.09.2021 в 14:48. Причина: Пример securityKeyName2Id приложил |
|
|
|