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