|
28.12.2007, 09:50 | #1 |
Участник
|
Как программно изменить права доступа на объект ?
Например, есть поле в таблице (или MenuItem или еще что-нибудь), нужно у группы изменить права доступа на это поле (или другой объект) из X++ .
Не подскажете, каким методом это можно сделать? А то что-то я запутался в секурных классах. |
|
28.12.2007, 10:09 | #2 |
Участник
|
Может я не понял вопрос. Зачем для этого кодить?
Программно проверить включён ли ключ можно так. X++: DictSecurityKey dictSecurityKey; ; dictSecurityKey = new DictSecurityKey(id ); if(!dictSecurityKey || (.rights() != AccessType::NoAccess))) { ..... } |
|
|
За это сообщение автора поблагодарили: lev (1). |
28.12.2007, 10:16 | #3 |
Участник
|
Ключи тут не причем ! Я имею ввиду права доступа у полю таблицы или к пункту меню для определенной группы пользователей.
|
|
28.12.2007, 10:42 | #4 |
Участник
|
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 |
Участник
|
egorych - а зачем это могло вам понадобиться?
|
|
28.12.2007, 13:36 | #6 |
Участник
|
Например, делается новый пункт меню или кнопка, привязывается к существующему SecurityKey, и доступ автоматом получают все, у кого этот ключ "включен". Затем нужно пройти по всем группам и выключить кому не положено.
Хочу эту процедуру чуть-чуть упростить. |
|
28.12.2007, 14:41 | #7 |
Участник
|
Может поможет вот этот проект? Это установка прав, но идем не от группы к правам, а наоборот: выбираем пункт на который нужно установить права и переходим в список групп.
|
|
|
За это сообщение автора поблагодарили: 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; 28.12.2007 в 16:52. |
|
25.08.2009, 14:41 | #9 |
Талантливый разгвоздяй
|
Цитата:
Application version: 4.0.2501.121 Localization version: Eastern Europe Занес в полезное ;--). egorych, пожалуйста, поделитесь опытом:
Последний раз редактировалось Kabardian; 25.08.2009 в 14:51. |
|
25.08.2009, 21:18 | #10 |
Участник
|
Цитата:
А как вы его писали ? Переложили дерево из стандартной формы прав доступа для групп на некое подобие реляционной структуры ? Известные косяки при использовании есть ? (уж очень стремно залезать в права самим) У вас на какой версии работало ? 3-ка ? |
|
29.08.2009, 20:39 | #11 |
Участник
|
Цитата:
А как вы его писали ?
Переложили дерево из стандартной формы прав доступа для групп на некое подобие реляционной структуры ? Последний раз редактировалось Raven Melancholic; 29.08.2009 в 20:41. |
|
|
За это сообщение автора поблагодарили: Logger (9), Kabardian (3). |
01.11.2011, 18:39 | #12 |
Участник
|
|
|
03.12.2011, 23:45 | #13 |
Участник
|
Используем на тех же объединенных кондитерах на DAX2009, например, чтобы понять, какие группы имеют доступ к объекту. Функционал крайне полезный. Выложу в понедельник проект для DAX2009.
Последний раз редактировалось Bega; 03.12.2011 в 23:56. |
|
02.12.2011, 22:08 | #14 |
Талантливый разгвоздяй
|
Просто поделюсь опытом, может кому-нибудь пригодится.
Дано:
Задача:
Выполняется очееень долго (~4-9 часов) и не всегда завершается успешно. Оптимизировать времени не было, поэтому и хотфикс не выкладываю, а лишь делюсь опытом :-). |
|
|
За это сообщение автора поблагодарили: Pustik (3). |
03.12.2011, 13:49 | #15 |
NavAx
|
Цитата:
Или просто на MenuItem данного отчета вешаем другой ключ. Или в коде отчета делаем проверку на ключ и закрываем его, если нет доступа. Есть масса вариантов что бы потратить ~4-9 часов более разумно. |
|
|
За это сообщение автора поблагодарили: gl00mie (2), Kabardian (1). |
03.12.2011, 18:19 | #16 |
Талантливый разгвоздяй
|
Цитата:
Сообщение от raz
А чего так долго? Открываем таблицу AccessRightList и удаляем там руками записи с именем MenuItem-а данного отчета (это если в компании принято давать права на объекты, а не на ключи доступа). Если права даны на ключи, то пишем job, который для групп с ключами, добавит запись с отключением доступа к отчету.
Или просто на MenuItem данного отчета вешаем другой ключ. Или в коде отчета делаем проверку на ключ и закрываем его, если нет доступа. Есть масса вариантов что бы потратить ~4-9 часов более разумно.
Используя подход описанный на Axaptapedia, написал джоб для массового отключения прав доступа к menuitem, чуть позже выложу его здесь. |
|
06.12.2011, 22:30 | #17 |
Талантливый разгвоздяй
|
Цитата:
Сообщение от Kabardian
Спасибо за много разных и интересных вариантов :-), но были причины:
Использовал оттуда кусок кода для каждого сочетания группа + домен: 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 |
Участник
|
Цитата:
Сообщение от Kabardian
Будьте предельно осторожны с джобом по ссылке! Последствия в моем случае:
Пока точная причина неизвестна, тем не менее решил предупредить, мало ли вдруг все-таки этот джоб виноват . Как выясню причину, сообщу. X++: xAccessRightsList::saveSecurityRights(securitySet.pack(), localGroup.Id, domain); Также для большинства табличек прописывается NoAccess. Как правило приводит к тому что лукапы не работают. Если написать так X++: xAccessRightsList::saveSecurityRights(securitySet.packTouched(), localGroup.Id, domain); |
|
|
За это сообщение автора поблагодарили: S.Kuskov (5). |
05.12.2011, 08:09 | #19 |
Сам.AX
|
Цитата:
Поэтому не советую трогать AccessRightsList руками.
__________________
ѣ |
|
05.12.2011, 11:08 | #20 |
NavAx
|
|
|