Показать сообщение отдельно
Старый 08.12.2008, 15:35   #4  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от 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