18.06.2007, 17:00 | #1 |
Участник
|
Как узнать у каких групп есть права на MenuItem ?
Собственно нужно по конкретному MenuItem узнать, у каких групп есть права на него? Как это можно сделать?
|
|
18.06.2007, 17:17 | #2 |
Участник
|
X++: static void Test_AccessibleForWho(Args _args) { SecurityKeySet secSet; UserGroupInfo userGroup; DomainInfo domain; str items; container menuItems = [ [menuItemDisplayStr(UKS_IV_Load), 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()+strFmt(', %1', secSet.menuItemAccess(name, type)); } } 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)); } } } } |
|
|
За это сообщение автора поблагодарили: SHiSHok (1), Gustav (5), Kabardian (3). |
18.06.2007, 17:20 | #3 |
Участник
|
До кучи еще SC
X++: static void Test_AccessibleSCForWho(Args _args) { SecurityKeySet secSet; UserGroupInfo userGroup; DomainInfo domain; str items; ; while select userGroup { while select domain { secSet = SysSecurity::constructSecurityKeySet(); secSet.loadGroupRights(userGroup.id, domain.Id); if (secSet.access(securityKeyNum(Admin)) >= AccessType::View) { info(strFmt('%1;%2: %3', userGroup.id, domain.Id, items)); } } } } |
|
18.06.2007, 18:08 | #4 |
Moderator
|
Цитата:
X++: while select userGroup { if ((select count(RecId) from DomainInfo).RecId) { 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)); } } } else // NO DOMAINS { secSet = SysSecurity::constructSecurityKeySet(); secSet.loadGroupRights(userGroup.id, ''); items = accessibleMenuItems(); if (items) { info(strFmt('%1;%2: %3', userGroup.id, domain.Id, items)); } } } |
|
|
За это сообщение автора поблагодарили: Kabardian (3). |
18.06.2007, 18:13 | #5 |
Участник
|
Благодарствую премного!
|
|
18.06.2007, 18:13 | #6 |
Участник
|
Ага. Вообще в тулзу надо бы оформить...
|
|
19.06.2007, 11:14 | #7 |
Участник
|
Получается, что это работает, если на MenuItem навешен SecurityKey ?
А если он пустой, то показывает, что доступно всем - хотя в меню у всех выключено |
|
19.06.2007, 11:20 | #8 |
Участник
|
Каким образом выключено в меню?
|
|
19.06.2007, 11:39 | #9 |
Участник
|
Права групп пользователей - в выпадающем списке выбираем "Главное меню", ищем нужный пункт и жмем "нет доступа". или закрываем какую-то ветку, например "отчеты" - закрываются и все что ниже в меню
|
|
19.06.2007, 11:44 | #10 |
Administrator
|
__________________
Возможно сделать все. Вопрос времени |
|
19.06.2007, 12:13 | #11 |
Участник
|
2sukhanchik - я так и пробовал - 1 вариант показывает правильно если есть SK - если не привязан ни к какому ключу - показывает доступ для всех групп.
|
|
19.06.2007, 12:23 | #12 |
Участник
|
А в случае такого запрещения можно вызвать этот MenuItem из другого меню или по кнопке?
|
|
19.06.2007, 12:29 | #13 |
Administrator
|
2belugin: Думаю, что нет - т.к. в этом случае (когда MenuItem без SK) в AccessRightList должна появиться запись о конкретном MenuItem - а значит на него не должен быть доступ
__________________
Возможно сделать все. Вопрос времени |
|
19.06.2007, 12:56 | #14 |
Участник
|
Правильно - item выключается во всех менюшках, куда был вставлен.
|
|
Теги |
как найти, как правильно, права доступа |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|