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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.12.2007, 09:50   #1  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
? Как программно изменить права доступа на объект ?
Например, есть поле в таблице (или MenuItem или еще что-нибудь), нужно у группы изменить права доступа на это поле (или другой объект) из X++ .
Не подскажете, каким методом это можно сделать? А то что-то я запутался в секурных классах.
Старый 28.12.2007, 10:09   #2  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Может я не понял вопрос. Зачем для этого кодить?
Программно проверить включён ли ключ можно так.
X++:
    DictSecurityKey dictSecurityKey;
    ;
    dictSecurityKey = new DictSecurityKey(id );
    if(!dictSecurityKey || (.rights() != AccessType::NoAccess)))
    {
         .....
    }
За это сообщение автора поблагодарили: lev (1).
Старый 28.12.2007, 10:16   #3  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Ключи тут не причем ! Я имею ввиду права доступа у полю таблицы или к пункту меню для определенной группы пользователей.
Старый 28.12.2007, 10:42   #4  
EAlex is offline
EAlex
Участник
 
27 / 14 (1) ++
Регистрация: 30.01.2004
X++:
secSet  = SysSecurity::constructSecurityKeySet();
secSet.loadGroupRights(userGroup.id, '');

//Уровень доступа на MenuItem
//            secSet.access(_MenuItemId ,AccessType::NoAccess);        

//Уровень доступа на таблицу
//            secSet.tableAccess(_TableId,AccessType::NoAccess);        

//Сохранить
xAccessRightsList::saveSecurityRights(secSet.packTouched(), userGroup.id, '');
За это сообщение автора поблагодарили: Logger (1).
Старый 28.12.2007, 12:08   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
egorych - а зачем это могло вам понадобиться?
Старый 28.12.2007, 13:36   #6  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от kashperuk Посмотреть сообщение
egorych - а зачем это могло вам понадобиться?
Например, делается новый пункт меню или кнопка, привязывается к существующему SecurityKey, и доступ автоматом получают все, у кого этот ключ "включен". Затем нужно пройти по всем группам и выключить кому не положено.
Хочу эту процедуру чуть-чуть упростить.
Старый 28.12.2007, 14:41   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Может поможет вот этот проект? Это установка прав, но идем не от группы к правам, а наоборот: выбираем пункт на который нужно установить права и переходим в список групп.
Вложения
Тип файла: xpo AK_SecurityUserGroup.xpo (100.4 Кб, 1032 просмотров)
За это сообщение автора поблагодарили: Dron AKA andy (2), belugin (3), egorych (1), gl00mie (9), Umi (1), Egesihora (1), Maximin (2), Kabardian (3), Logger (5), denny (1), player (1), zemius (1), Alexanderrrr (1), andy.l (1), S.Kuskov (2), alex55 (2), sukhanchik (10), Just_smile (1), Proba (1), dn (2), ice321i (1), novic (1), vagon (1), Player1 (1), someOne (8), A_BAS (0), Xardas (1), mazzy (2), Ace of Database (4), PQRS (1), wedmak_dk (1), RVS (5), Товарищ ♂uatr (4).
Старый 28.12.2007, 15:04   #8  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Может поможет вот этот проект?
Спасибо, посмотрю.
Посмотрел, класс!!! То что я хотел делать!
Дкмаю в полезное занести нужно

Последний раз редактировалось egorych; 28.12.2007 в 16:52.
Старый 25.08.2009, 14:41   #9  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от egorych Посмотреть сообщение
Спасибо, посмотрю.
Посмотрел, класс!!! То что я хотел делать!
Дкмаю в полезное занести нужно
Kernel version: 4.0.2501.116
Application version: 4.0.2501.121
Localization version: Eastern Europe


Занес в полезное ;--).

egorych, пожалуйста, поделитесь опытом:
  1. На какой версии AX использовали?
  2. На какой среде? (тестовая, рабочая)
  3. Были ли какие-то проблемы с использованием?
У меня возникла только одна проблема -- кракозябры при установке на полностью английскую тестовую среду. Проблема решилась сменой региональных настроек на родные ;--).

Последний раз редактировалось Kabardian; 25.08.2009 в 14:51.
Старый 25.08.2009, 21:18   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Может поможет вот этот проект? Это установка прав, но идем не от группы к правам, а наоборот: выбираем пункт на который нужно установить права и переходим в список групп.
Пробежал код по диагонали - впечатлило.
А как вы его писали ?
Переложили дерево из стандартной формы прав доступа для групп на некое подобие реляционной структуры ?

Известные косяки при использовании есть ? (уж очень стремно залезать в права самим)
У вас на какой версии работало ? 3-ка ?
Старый 29.08.2009, 20:39   #11  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
А как вы его писали ?
Переложили дерево из стандартной формы прав доступа для групп на некое подобие реляционной структуры ?
Да, применил индуский поход Copy-Paste. Разрабатывалось для Ax3.0 еще когда работал в объединенных кондитерах. Там достаточно много было доработок (как самостоятельных, так и с привлечением специалистов Навикон и Норбит) Начальник отдела сопровождения Юля замучилась при появлении новой функциональности устанавливать права по группам и попросила сделать что-то, облегчающее работу. Вот, после очередного похода в Золотую воблу сил на что-то серьезное не было и в результате появилось это.Разрабатывалось для Ax3.0, но сейчас вроде работает на DAX4. Правда на DAX4 иногда при установке каскада бывает задумывается минут на 20-30. Закономерности не нашел, а следовательно не поправил.

Последний раз редактировалось Raven Melancholic; 29.08.2009 в 20:41.
За это сообщение автора поблагодарили: Logger (9), Kabardian (3).
Старый 01.11.2011, 18:39   #12  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Может поможет вот этот проект? Это установка прав, но идем не от группы к правам, а наоборот: выбираем пункт на который нужно установить права и переходим в список групп.
На 2009-й кто-нить использовал это проект ?
Старый 03.12.2011, 23:45   #13  
Bega is offline
Bega
Участник
Аватар для Bega
 
382 / 444 (15) +++++++
Регистрация: 18.08.2005
Адрес: Москва
Цитата:
Сообщение от Logger Посмотреть сообщение
На 2009-й кто-нить использовал это проект ?
Используем на тех же объединенных кондитерах на DAX2009, например, чтобы понять, какие группы имеют доступ к объекту. Функционал крайне полезный. Выложу в понедельник проект для DAX2009.

Последний раз редактировалось Bega; 03.12.2011 в 23:56.
Старый 02.12.2011, 22:08   #14  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Просто поделюсь опытом, может кому-нибудь пригодится.

Дано:
  • AX 4.0 SP2, версия ядра 4.0.2503.116;
  • ~450 групп пользователей;
  • 10 доменов.

Задача:
  • отключить доступ к одному отчету у всех групп.

Выполняется очееень долго (~4-9 часов) и не всегда завершается успешно. Оптимизировать времени не было, поэтому и хотфикс не выкладываю, а лишь делюсь опытом :-).
За это сообщение автора поблагодарили: Pustik (3).
Старый 03.12.2011, 13:49   #15  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от Kabardian Посмотреть сообщение
Выполняется очееень долго (~4-9 часов) и не всегда завершается успешно. Оптимизировать времени не было, поэтому и хотфикс не выкладываю, а лишь делюсь опытом :-).
А чего так долго? Открываем таблицу AccessRightList и удаляем там руками записи с именем MenuItem-а данного отчета (это если в компании принято давать права на объекты, а не на ключи доступа). Если права даны на ключи, то пишем job, который для групп с ключами, добавит запись с отключением доступа к отчету.
Или просто на MenuItem данного отчета вешаем другой ключ.
Или в коде отчета делаем проверку на ключ и закрываем его, если нет доступа.
Есть масса вариантов что бы потратить ~4-9 часов более разумно.
За это сообщение автора поблагодарили: gl00mie (2), Kabardian (1).
Старый 03.12.2011, 18:19   #16  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от raz Посмотреть сообщение
А чего так долго? Открываем таблицу AccessRightList и удаляем там руками записи с именем MenuItem-а данного отчета (это если в компании принято давать права на объекты, а не на ключи доступа). Если права даны на ключи, то пишем job, который для групп с ключами, добавит запись с отключением доступа к отчету.
Или просто на MenuItem данного отчета вешаем другой ключ.
Или в коде отчета делаем проверку на ключ и закрываем его, если нет доступа.
Есть масса вариантов что бы потратить ~4-9 часов более разумно.
Спасибо за много разных и интересных вариантов :-), но были причины:
  • отчетов было много (больше 100);
  • нужно было обойтись с минимумом разработки, чтобы не тратить много времени на тестирование.
Из предложенных вариантов, не вижу какого-то одного универсального, чтобы он сработал на случай, когда я не знаю как в компании принято давать права на объекты .

Используя подход описанный на Axaptapedia, написал джоб для массового отключения прав доступа к menuitem, чуть позже выложу его здесь.
Старый 06.12.2011, 22:30   #17  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
!
Цитата:
Сообщение от Kabardian Посмотреть сообщение
Спасибо за много разных и интересных вариантов :-), но были причины:
  • отчетов было много (больше 100);
  • нужно было обойтись с минимумом разработки, чтобы не тратить много времени на тестирование.
Используя подход описанный на Axaptapedia, написал джоб для массового отключения прав доступа к menuitem, чуть позже выложу его здесь.
Будьте предельно осторожны с джобом по ссылке! Последствия в моем случае:
  • слетели права доступа для многих групп пользователей к различным таблицам
  • значительно замедлилась система


Использовал оттуда кусок кода для каждого сочетания группа + домен:
X++:
void disableMenuItems(SecurityKeySet _securitySet)
    {
        str name;
        AccessRecordType recordType;
        int idx;
        AccessType accessType;
        for (idx = 1; idx <= conLen(menuItems); idx++)
        {
            [name, recordType] = conpeek(menuItems, idx);
            accessType = _securitySet.menuItemAccess(name, recordType);
            if (accessType!= AccessType::NoAccess)
            {
                info(strFmt('%1:%2, %3', name, recordType, accessType));
                _securitySet.menuItemAccess(name, recordType, AccessType::NoAccess);
            }
        }
    }

Пока точная причина неизвестна, тем не менее решил предупредить, мало ли вдруг все-таки этот джоб виноват .


Как выясню причину, сообщу.
За это сообщение автора поблагодарили: Logger (1).
Старый 24.01.2019, 10:09   #18  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,940 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Kabardian Посмотреть сообщение
Будьте предельно осторожны с джобом по ссылке! Последствия в моем случае:
  • слетели права доступа для многих групп пользователей к различным таблицам
  • значительно замедлилась система


Пока точная причина неизвестна, тем не менее решил предупредить, мало ли вдруг все-таки этот джоб виноват .


Как выясню причину, сообщу.
причина в этой строке кода
X++:
xAccessRightsList::saveSecurityRights(securitySet.pack(), localGroup.Id, domain);
При ее использовании сохраняются все права для всех табличек и менюитемов. В моем случае получилось порядка 10 тысяч записей на одну группу прав. Конечно будет тормозить.
Также для большинства табличек прописывается NoAccess. Как правило приводит к тому что лукапы не работают.
Если написать так
X++:
xAccessRightsList::saveSecurityRights(securitySet.packTouched(), localGroup.Id, domain);
то все ок.
За это сообщение автора поблагодарили: S.Kuskov (5).
Старый 05.12.2011, 08:09   #19  
maximka is offline
maximka
Сам.AX
Аватар для maximka
Самостоятельные клиенты AX
 
96 / 24 (1) +++
Регистрация: 26.10.2006
Адрес: Тюмень
Цитата:
Сообщение от raz Посмотреть сообщение
А чего так долго? Открываем таблицу AccessRightList и удаляем там руками записи с именем MenuItem-а данного отчета
Ага, а если у нас на родительский объект дан доступ > NoAccess, то с удивлением обнаруживаем, что отчет у пользователя не пропал.
Поэтому не советую трогать AccessRightsList руками.
__________________
ѣ
Старый 05.12.2011, 11:08   #20  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
Цитата:
Сообщение от maximka Посмотреть сообщение
Ага, а если у нас на родительский объект дан доступ > NoAccess, то с удивлением обнаруживаем, что отчет у пользователя не пропал.
Поэтому не советую трогать AccessRightsList руками.
Читайте всё сообщение внимательно.
Теги
axapta, законченный пример, полезное, права доступа, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
права доступа Himan DAX: Функционал 9 24.09.2010 16:52
Права доступа Группы пользователей к таблице ta_and DAX: Администрирование 2 19.01.2009 15:19
Права доступа на поля формы. AlexeyBP DAX: Функционал 6 12.12.2006 12:02
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02
Права доступа - Журнал платежей SDA DAX: Прочие вопросы 1 20.09.2004 23:10

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:21.