08.12.2008, 14:53 | #1 |
Участник
|
отчет по FeatureKey
акс 2.5
нужно сформировать отчет по определенному ключу. то есть посмотреть у каких групп прав есть доступ на этот ключ. как это можно сделать? вроде такого отчета нет в стандарте, можно ли его самому написать? |
|
08.12.2008, 15:02 | #2 |
MCITP
|
Цитата:
Через таблицу AccessRightsList...
__________________
Zhirenkov Vitaly |
|
08.12.2008, 15:17 | #3 |
Участник
|
хорошая таблица конечно , он она не подходит немного ((
в ней видны только те группы прав для которых изменяли права на этот ключ. а для тех которых по умолчанию присвоились там нет. например есть такие группы для которых этот ключ стал доступен сразу же после его создание, видимо потому что группа имеет полные права на ключ родитель. |
|
08.12.2008, 15:35 | #4 |
MCITP
|
Цитата:
Сообщение от propeller
хорошая таблица конечно , он она не подходит немного ((
в ней видны только те группы прав для которых изменяли права на этот ключ. а для тех которых по умолчанию присвоились там нет. например есть такие группы для которых этот ключ стал доступен сразу же после его создание, видимо потому что группа имеет полные права на ключ родитель. Нужно пробежаться вверх по ключам и найти всё что нужно самим. У меня есть пример рекурсивной функции, которую я сам писал когда-то. Правда она вырвана из контекста, но с сутью, я думаю, разберётесь. Она проходит вверх по дереву ключей, пока не находит установленные права. X++: boolean findARLSecKey(DictSecurityKey _dictSecurityKey) { DictSecurityKey parentDictSecurityKey; ; // Ищем запись на ключ select firstOnly accessRightsList where accessRightsList.domainId == domainInfo.Id && accessRightsList.groupId == userGroupInfo.Id && accessRightsList.recordtype == accessrecordtype::SecurityKey && accessRightsList.parentId == 0 && accessRightsList.id == _dictSecurityKey.id() && accessRightsList.elementName == ""; if (accessRightsList) { // Если запись уже есть, то проверяем, что это полный доступ if (accessRightsList.accessType == accessType::Delete) return true; // Если не полный, значит нужно задать полный самим else return false; } if (_dictSecurityKey.parentSecurityKeyId()) { parentDictSecurityKey = New DictSecurityKey(_dictSecurityKey.parentSecurityKeyId()); return findARLSecKey(parentDictSecurityKey); } else return false; // root found }
__________________
Zhirenkov Vitaly |
|