- Модуль: disk
- Путь к файлу: ~/bitrix/modules/disk/lib/rightsmanager.php
- Класс: BitrixDiskRightsManager
- Вызов: RightsManager::getUserRightsByObject
private function getUserRightsByObject($objectId, $userId)
{
$query = new Query(RightTable::getEntity());
$rights = $query
->setSelect(array(
'ACCESS_CODE',
'TASK_ID',
'NEGATIVE',
'NAME' => 'TASK_OPERATION.OPERATION.NAME',
'DEPTH_LEVEL' => 'PATH_PARENT.DEPTH_LEVEL',
))
->setFilter(array(
'PATH_PARENT.OBJECT_ID' => $objectId,
'USER_ACCESS.USER_ID' => $userId,
))->exec()->fetchAll();
$query = new Query(RightTable::getEntity());
$query
->setSelect(
array(
'ACCESS_CODE',
'TASK_ID',
'NEGATIVE',
'NAME' => 'TASK_OPERATION.OPERATION.NAME',
'DEPTH_LEVEL' => 'PATH_PARENT.DEPTH_LEVEL',
)
)
->setFilter(
array(
'LOGIC' => 'OR',
array(
'PATH_PARENT.OBJECT_ID' => $objectId,
'=ACCESS_CODE' => 'CR',
),
array(
'PATH_PARENT.OBJECT_ID' => $objectId,
'=ACCESS_CODE' => 'AU',
)
)
)
;
$creatorRights = array();
foreach($query->exec()->fetchAll() as $additionalRight)
{
if($additionalRight['ACCESS_CODE'] === 'AU')
{
$rights[] = $additionalRight;
}
elseif($additionalRight['ACCESS_CODE'] === 'CR')
{
$creatorRights[] = $additionalRight;
}
}
if($creatorRights)
{
$query = new Query(ObjectTable::getEntity());
$query
->setSelect(array('CREATED_BY'))
->addFilter('=ID', $objectId)
;
$creatorData = $query->exec()->fetch();
if($creatorData && $creatorData['CREATED_BY'] == $userId)
{
$rights = array_merge($rights, $creatorRights);
}
}
Collection::sortByColumn($rights, array('DEPTH_LEVEL' => SORT_DESC));
return $rights;
}