• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_document.php
  • Класс: \CCrmDocument
  • Вызов: CCrmDocument::CanUserOperateDocument
static function CanUserOperateDocument($operation, $userId, $documentId, $arParameters = array())
{
	$arDocumentID = static::GetDocumentInfo($documentId);
	if (empty($arDocumentID))
		throw new CBPArgumentNullException('documentId');

	$userId = intval($userId);

	$key = "{$documentId}_{$userId}_{$operation}";
	if(isset(self::$USER_PERMISSION_CHECK[$key]))
	{
		return self::$USER_PERMISSION_CHECK[$key];
	}

	if (!array_key_exists('AllUserGroups', $arParameters))
	{
		if (!array_key_exists('UserGroups', $arParameters))
		{
			$arParameters['UserGroups'] = static::PrepareUserGroups($userId);
			if (!array_key_exists('CreatedBy', $arParameters))
			{
				$responsibleID = CCrmOwnerType::GetResponsibleID(
					CCrmOwnerType::ResolveID($arDocumentID['TYPE']),
					$arDocumentID['ID'],
					false
				);
				if($responsibleID <= 0)
				{
					self::$USER_PERMISSION_CHECK[$key] = false;
					return false;
				}
				$arParameters['CreatedBy'] = $responsibleID;
			}
		}

		$arParameters['AllUserGroups'] = $arParameters['UserGroups'];
		if (isset($arParameters['CreatedBy']) && $userId == $arParameters['CreatedBy'])
		{
			$arParameters['AllUserGroups'][] = 'Author';
		}
	}

	if ((isset($arParameters['UserIsAdmin']) && $arParameters['UserIsAdmin'] === true)
		|| in_array(1, $arParameters['AllUserGroups']))
	{
		self::$USER_PERMISSION_CHECK[$key] = true;
		return true;
	}

	$permissionEntity = static::ResolvePermissionEntity($arDocumentID, $arParameters);
	$userPermissions = CCrmPerms::GetUserPermissions($userId);
	if ($arDocumentID['ID'] > 0)
	{
		$entityAttrs = isset($arParameters['CRMEntityAttr']) && is_array($arParameters['CRMEntityAttr']) && !empty($arParameters['CRMEntityAttr'])
			? $arParameters['CRMEntityAttr'] : null;

		if($operation == CBPCanUserOperateOperation::ViewWorkflow
			|| $operation == CBPCanUserOperateOperation::ReadDocument)
		{
			$result = CCrmAuthorizationHelper::CheckReadPermission($permissionEntity, $arDocumentID['ID'], $userPermissions, $entityAttrs);
		}
		else
		{
			$result = CCrmAuthorizationHelper::CheckUpdatePermission($permissionEntity, $arDocumentID['ID'], $userPermissions, $entityAttrs);
		}
	}
	else
	{
		$result = CCrmAuthorizationHelper::CheckCreatePermission($permissionEntity, $userPermissions);
	}

	self::$USER_PERMISSION_CHECK[$key] = $result;
	return $result;
}