Раздел: Администрирование
Здесь собираются сведения по поводу системы безопасности в Axapta
1. Форма раздачи прав несет в себе лишь ту бяку - что при первом просмотре дерева права грузятся в память, после чего там и остаются… до перезапуска Аксапты. Более бяк там нет… Она просто строит дерево
2. Бэкап таблиц ««SysSecurity*»» по-хорошему надо делать по-другому: Модифицируется экспорт/импорт прав в Аксапте таким образом - чтобы в получившемся файле лежали только ИМЕНА элементов АОТ. Т.е. по сути - нужно экспортнуть таблички ««AccessRightsList»» и табличек ««SysSecurity*»», заменив при экспорте ID-шники на имена. Ну и ессно обратно - при импорте - подставив вместо имен текущие значения ID-шников. При экспорте - надо не забыть сохранить права перед экспортом. После импорта - их надо перегрузить и обновить дерево в форме Файлы, в которых сохранены права - можно хранить в сейфе
3. Упаси Бог изменять права в трехуровневой конфигурации. Аксапта сохраняет права по принципу кто последний вышел из нее - тот и прав. А если вы настроили права, а после этого другой юзер вышел - можете смело считать свою работу напрасной. При импорте прав (т.е. изменении данных в табличках) - крайне нежелательно вообще иметь АОС под рукой…. Ибо его наличие аккурат приводит к глюкам, описанным George Nordic
Пользователю можно сбросить пароль, если есть доступ к SQL серверу. Для этого надо очистить поле OSACCOUNTNAME таблицы UserInfo (3959)
2888 – некоторе описание внутренностей системы контроля доступа в Axapta
Данный джоб выводит в InfoLog перечень групп, которым доступны зданные пункты меню (контейнер menuItems)
static void Test_AccessibleForWho(Args _args) { SecurityKeySet secSet; UserGroupInfo userGroup; DomainInfo domain; str items; container menuItems = [ [menuItemDisplayStr(InventTable), AccessRecordType::MenuItemDisplay], [menuItemDisplayStr(LedgerTable), AccessRecordType::MenuItemDisplay] ]; str accessibleMenuItems() { int i; MenuItemName name; AccessRecordType type; str ret; ; for (i=1; i<=conLen(menuItems); i++) { [name, type] = conPeek(menuItems, i); if (secSet.menuItemAccess(name, type)) { if (ret) ret += ', '; ret += SysDictMenu::newMenuItem(name, (type == AccessRecordType::MenuItemAction) ? MenuItemType::Action : MenuItemType::Display ).label(); } } return ret; } ; while select userGroup { while select domain { secSet = SysSecurity::constructSecurityKeySet(); secSet.loadGroupRights(userGroup.id, domain.Id); items = accessibleMenuItems(); if (items) { info(strFmt('%1;%2: %3', userGroup.id, domain.Id, items)); } } } }