• Модуль: 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;
}