• Модуль: socialnetwork
  • Путь к файлу: ~/bitrix/modules/socialnetwork/classes/general/user_perms.php
  • Класс: CAllSocNetUserPerms
  • Вызов: CAllSocNetUserPerms::InitUserPerms
static function InitUserPerms($currentUserID, $userID, $bCurrentUserIsAdmin)
{
	global $arSocNetUserOperations, $USER;

	$arReturn = array();

	$currentUserID = intval($currentUserID);
	$userID = intval($userID);

	if ($userID <= 0)
	{
		return false;
	}

	$arReturn["Operations"] = array();
	if ($currentUserID <= 0)
	{
		$arReturn["IsCurrentUser"] = false;
		$arReturn["Relation"] = false;
		$arReturn["Operations"]["modifyuser"] = false;
		$arReturn["Operations"]["viewcontacts"] = false;
		foreach ($arSocNetUserOperations as $operation => $defPerm)
		{
			$arReturn["Operations"][$operation] = CSocNetUserPerms::CanPerformOperation($currentUserID, $userID, $operation, false);
		}
	}
	else
	{
		$arReturn["IsCurrentUser"] = ($currentUserID == $userID);
		$arReturn["Relation"] = (
			$arReturn["IsCurrentUser"]
				? false
				: CSocNetUserRelations::GetRelation($currentUserID, $userID)
		);

		if (
			$bCurrentUserIsAdmin
			|| $arReturn["IsCurrentUser"]
		)
		{
			$arReturn["Operations"]["modifyuser"] = true;
			$arReturn["Operations"]["viewcontacts"] = true;
			foreach ($arSocNetUserOperations as $operation => $defPerm)
			{
				$arReturn["Operations"][$operation] = true;
			}
		}
		else
		{
			$arReturn["Operations"]["modifyuser"] = false;
			$arReturn["Operations"]["viewcontacts"] = (
				CSocNetUser::IsFriendsAllowed()
					? ($arReturn["Relation"] == SONET_RELATIONS_FRIEND)
					: true
			);
			foreach ($arSocNetUserOperations as $operation => $defPerm)
			{
				$arReturn["Operations"][$operation] = CSocNetUserPerms::CanPerformOperation($currentUserID, $userID, $operation, false);
			}
		}

		$arReturn["Operations"]["modifyuser_main"] = false;
		if ($arReturn["IsCurrentUser"])
		{
			if ($USER->CanDoOperation('edit_own_profile'))
			{
				$arReturn["Operations"]["modifyuser_main"] = true;
			}
		}
		elseif (
			$USER->CanDoOperation('edit_all_users')
			|| (
				$USER->CanDoOperation('edit_subordinate_users')
				&& count(array_diff(CUser::GetUserGroup($userID), CSocNetTools::GetSubordinateGroups($currentUserID))) <= 0
			)
		)
		{
			$arReturn["Operations"]["modifyuser_main"] = true;
		}
	}

	return $arReturn;
}