Раздел: [[Администрирование | ]] ---- Здесь собираются сведения по поводу системы безопасности в Axapta [[ДоступНаУровнеЗаписей]] [[КакПрограммноИзменитьПароль]] ----- 1. Форма раздачи прав несет в себе лишь ту бяку - что при первом просмотре дерева права грузятся в память, после чего там и остаются... до перезапуска Аксапты. Более бяк там нет... Она просто строит дерево 2. Бэкап таблиц ""SysSecurity*"" по-хорошему надо делать по-другому: Модифицируется экспорт/импорт прав в Аксапте таким образом - чтобы в получившемся файле лежали только ИМЕНА элементов АОТ. Т.е. по сути - нужно экспортнуть таблички ""AccessRightsList"" и табличек ""SysSecurity*"", заменив при экспорте ID-шники на имена. Ну и ессно обратно - при импорте - подставив вместо имен текущие значения ID-шников. При экспорте - надо не забыть сохранить права перед экспортом. После импорта - их надо перегрузить и обновить дерево в форме Файлы, в которых сохранены права - можно хранить в сейфе 3. Упаси Бог изменять права в трехуровневой конфигурации. Аксапта сохраняет права по принципу кто последний вышел из нее - тот и прав. А если вы настроили права, а после этого другой юзер вышел - можете смело считать свою работу напрасной. При импорте прав (т.е. изменении данных в табличках) - крайне нежелательно вообще иметь АОС под рукой.... Ибо его наличие аккурат приводит к глюкам, описанным George Nordic ---- Пользователю можно сбросить пароль, если есть доступ к SQL серверу. Для этого надо очистить поле OSACCOUNTNAME таблицы [[Таблица/UserInfo]] ([[AxForum:3959]]) [[AxForum:2888]] -- некоторе описание внутренностей системы контроля доступа в Axapta [[AxForum:7654]] ---- Данный джоб выводит в 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)); } } } }