Цитата:
Сообщение от
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
}