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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.06.2005, 08:46   #21  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,305 / 3538 (124) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
и еще маааленькое уточнение... Если сответствующий элемент не найдет в AccessRightsList, то его права наследуются от родителя в дереве (это Menuitem либо SecurityKey, либо FeatureKey)... А в 2.5 насколько я помню у FeatureKey может быть несколько родителей .... А сия инфа лежит исключительно в .aod-файликах
Старый 23.06.2005, 09:49   #22  
ilya is offline
ilya
Участник
 
15 / 10 (1) +
Регистрация: 16.11.2003
Адрес: Москва
А можно про эту песню поподробнее
Цитата:
Однако, ответить на вопрос - а кто имеет такой-то доступ к такому-то пункту меню - получить можно. Пишется хранимая процедура, в которой в качестве параметра передается тип элемента и его ID (А вот уж как получить ID -отдельная песня).
Да, да, да, это именно то что мне нужно - вот только как получить ID какого-нибудь пункта?

В AccessRightsList - тоже только ID пунктов меню. Я писал выше ее структуру.

Поэтому если знать какой ID к какому пункту меню относиться, то тогда бы я нашел все группы, которые имеют на него права (в том числе и наследованные), а по группам соответственно пользователей.

Готов даже каким-то образом Аксаптовским классом собирать эту информацию и класть в таблицу SQL. Это возможно как-нибудь?

Заранее огромное спасибо!
Старый 23.06.2005, 10:41   #23  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,305 / 3538 (124) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Если задействовать Аксаптийный класс - то возможно все ... есть такая табличка - \\SystemDocumentaion\Tables\UtilElementsId. Табличка хранится в .aod-файлике. Там есть поле id. Таким образом - аксаптийный класс должен перелить сию табличку в SQL, который уже может все делать.... Единственный нюанс - id-шники могут меняться (опускание в слой, импорт xpo) или же появляться новые (разработка)
Старый 23.06.2005, 12:37   #24  
usp is offline
usp
Участник
 
21 / 10 (1) +
Регистрация: 31.07.2003
Адрес: Москва
Наверное, есть более героический путь:
обратите внимание на таблицы перекрёстных ссылок
xRefNames,
xRefPaths,
XREFREFERENCES,
XREFTABLERELATION,
XREFTYPEHIERARCHY

Если сумеете поднять "на грудь" 3 миллиона записей, то что-то может получиться.
Старый 23.06.2005, 13:01   #25  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,305 / 3538 (124) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
У перекрестных ссылок есть один недостаток - нет гарантии актуальности и много ненужной информации. Однако - существеный плюс - можно вообще не лазить в Аксапту
Старый 23.06.2005, 14:21   #26  
ilya is offline
ilya
Участник
 
15 / 10 (1) +
Регистрация: 16.11.2003
Адрес: Москва
Цитата:
Если сумеете поднять "на грудь" 3 миллиона записей, то что-то может получиться.
Для меня это не проблема, но я пока пошел по пути сбора данных в Аксапте через джобик с помощью DictFeatureKey и заполнение таблицы, чтобы потом через SQL вытянуть всю нужную мне информацию.
Старый 23.06.2005, 17:13   #27  
ilya is offline
ilya
Участник
 
15 / 10 (1) +
Регистрация: 16.11.2003
Адрес: Москва
?
Все с функциональными ключами все получилось!

Может кто подскажет а как функциональные ключи связаны с пунктами меню?
Понимаю, в 2.5 это зашито наверно в .aod, но как вытянуть их средствами Аксапты и положить в таблицу

ID пункта меню, ID Функц.ключа

?

Просто может это все поможет привести в порядок ту гору прав, уже разданных пользователям и не будет так страшно включать пользователей в новые группы, когда из-за доступа к одному пункту меню они "в подарок" получают доступ к множеству других пунктов.
Старый 24.06.2005, 15:40   #28  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,305 / 3538 (124) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Вытащить ID меню можно а) http://www.axforum.info/forums/showt...1524#post71524 - пробежавшись по АОТ, единственное что не надо забывать - что menuitem 3 вида - display, output и action - т.е. они сидят в разных поддеревьях, далее получив объект типа treenode - присвоить его объекту типа MenuFunction
б) попровать для тех же целей сделать выборку из \SystemDocumentaion\Tables\UtilElementsId. Там ID-шник лежит отдельным полем.
По ID-шнику сгенерить экземпляр класса MenuFunction.

Получив (любым способом) экземпляр класса MenuFunction можно заглянуть в его свойство FeatureKey. Оно возвращает код привязанного FeatureKey. Записав полученные ID меню и ID FeatureKey - можно заполнить искомую табличку
Старый 11.11.2006, 21:44   #29  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Экспорт прав всех групп в asg-файлы в заданном каталоге
Ах, какая архиполезнейшая ветка, господа! Прочитал с большим интересом.
Цитата:
Сообщение от Alexis Посмотреть сообщение
Вот только ума не приложу, неужели так сложно было реализовать эту кнопку и для ВСЕХ групп тоже, а не только для одной. :-\
С позволения присоединюсь, потому что тоже приходилось несколько раз экспортировать права всех групп в файлы - руками по одной группе за одно нажатие на кнопку "Экспорт". И тоже недоумевал. И тоже надоело. Решил рискнуть - и что-то получилось. Не супер-пупер, но сработало как мне надо. Может, кому-нибудь еще пригодится.
X++:
static void KKu_Job_6B01_ExportAllUserGroupsToFiles(Args _args)
{
    // сохраняет все права групп пользователей в отдельных файлах в указанном каталоге
    SysSecurityUserGroup    sysSecurity;
    UserGroupInfo           userGroupInfo;
    userGroupId             userGroupId , tmpUserGroupId;
    domainId                domainId    , tmpDomainId;
    str                     fileName;
    str                     filePath = @'C:\YourOwnFolder\ForUserGroups\'; // '//заключительный обратный слэш - обязателен'
    ;
    
    sysSecurity = SysSecurityUserGroup::construct();
    domainId = ''; // здесь возможно нужен конкретный домен, если их несколько,
                   // но у меня их нет (в таблице DomainInfo нет записей) - поэтому пустая строка
    
    while select userGroupInfo
    {
        userGroupId = userGroupInfo.id;
        fileName = filePath +
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace
                ( strReplace( userGroupId, '.', '_'), // в качестве имени файла - id группы, очищенный от "нехороших" символов
                                           ' ', '_'),  
                                           ':', '_'), 
                                           '/', '_'), 
                                          @'\', '_'), 
                                           '?', '_'),
                                           '*', '_'),
                                           '[', '_'),
                                           ']', '_')
                                           );
        tmpUserGroupId = sysSecurity.parmUserGroupId();
        tmpDomainId    = sysSecurity.parmDomainId();
    
        // ----------------------------------------------------------------------------------------
        // выдрано из цикла if (dialog.run()) метода exportWithDialog класса SysSecurityUserGroup
        // скопировал по-обезьяньи, не особо разбираясь что к чему, но всё работает как мне надо :)
        sysSecurity.save();
        sysSecurity.parmDomainId( domainId );
        sysSecurity.parmUserGroupId( userGroupId );
        sysSecurity.load();
        sysSecurity.export( fileName );
        sysSecurity.parmDomainId( tmpDomainId );
        sysSecurity.parmUserGroupId( tmpUserGroupId );
        sysSecurity.load();
        // ----------------------------------------------------------------------------------------
    }
}
Всё что нужно сделать перед запуском джоба, так это прописать ваше имя папки, в которую будут складываться файлы.

Имена файлов формируются автоматически из идентификаторов групп. "Центрально симметричная" конструкция с многократными вызовами функции strReplace занимается очисткой идентификаторов групп от "нехороших" символов с точки зрения имени файла. Как видно в коде, "нехорошие" символы заменяются символами подчеркивания. Степень "нехорошести" - моя субъективная и некоторые символы (пробел, точка) в принципе вполне корректны для имени файла. Просто я предпочитаю, чтобы имя файла состояло только из букв, цифр и подчеркиваний. Вы можете смело сократить или расширить перечень заменямых символов по вашему усмотрению (например, на основании предварительного анализа значений поля Id таблицы UserGroupInfo)

Собственно "движок" процесса экспорта заимствован из цикла if (dialog.run()) метода exportWithDialog класса SysSecurityUserGroup. Заимствован неосознанно, без большого понимания что и как происходит именно в этих строчках кода (за неимением времени разбираться). Если кто-то не сочтет за труд немного прокомментировать (или даже оптимизировать) этот фрагмент - заранее премного благодарен!

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Внимание - вопрос: вот вы выгрузили права для 5 групп и одного домена. А загружаться они как должны? А если они чуть-чуть отличаются между собой? А если при загрузке вы выделили не те группы/домены (или таковых вообще не существует)? А названия групп/доменов в файле экспорта/импорта не хранятся - т.к. импортировать права можно в другую пару домен/группа. Вопросов тут больше чем ответов.
На это заострение темы с доменами внимание, конечно, обратил, но особо пока не "грузился" по этому поводу и был очень рад, что домен у меня "один, да и тот пустой"
За это сообщение автора поблагодарили: zemlyn (2), Kabardian (3).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Экспорт/импорт платежных поручений _scorp_ DAX: Функционал 96 04.05.2017 17:52
Расширение возможностей стандартных прав доступа Stainless DAX: Программирование 2 19.06.2008 10:36
Пропали пункты меню в дереве настройки прав доступа Logger DAX: Программирование 10 21.06.2007 12:32
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42
Проблемы настройки прав доступа пользователям axot DAX: Администрирование 25 16.05.2002 10:47

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:00.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.