• Модуль: intranet
  • Путь к файлу: ~/bitrix/modules/intranet/lib/util.php
  • Класс: BitrixIntranetUtil
  • Вызов: Util::setAdminRights
static function setAdminRights($params)
{
	$userId = (!empty($params['userId']) ? intval($params['userId']) : 0);
	$currentUserId = (!empty($params['currentUserId']) ? intval($params['currentUserId']) : 0);
	$isCurrentUserAdmin = !!$params['isCurrentUserAdmin'];

	if (
		$userId <= 0
		|| $currentUserId <= 0
	)
	{
		return false;
	}

	if (
		!(
			Loader::includeModule("bitrix24") && CBitrix24::isPortalAdmin($currentUserId)
			|| $isCurrentUserAdmin
		)
	)
	{
		return false;
	}

	if (
		Loader::includeModule("bitrix24")
		&& BitrixBitrix24Integrator::isIntegrator($currentUserId)
	)
	{
		return false;
	}

	$userData = BitrixMainUserTable::getList([
		'select' => [ 'ID', 'UF_DEPARTMENT', 'ACTIVE' ],
		'filter' => [
			'=ID' => $userId
		],
	])->fetch();

	if (
		!is_array($userData['UF_DEPARTMENT']) // is extranet
		|| empty($userData['UF_DEPARTMENT'][0])
		|| $userData['ACTIVE'] !== "Y"
	)
	{
		return false;
	}

	$removeRightsFromCurrentAdmin = false;

	//groups for bitrix24 cloud
	if (
		Loader::includeModule('bitrix24') &&
		!CBitrix24::isMoreAdminAvailable()
	)
	{
		$removeRightsFromCurrentAdmin = true;

		if (!Feature::isFeatureEnabled('delegation_admin_rights'))
		{
			return false;
		}
	}

	[ $employeesGroupId, $portalAdminGroupId ] = self::getGroupsId();

	$currentUserGroups = CUser::getUserGroup($userId);
	foreach ($currentUserGroups as $groupKey => $group)
	{
		if ($group == $employeesGroupId)
		{
			unset($currentUserGroups[$groupKey]);
		}
	}
	$currentUserGroups[] = "1";
	$currentUserGroups[] = $portalAdminGroupId;
	$user = new CUser();
	$user->update($userId, ['GROUP_ID' => $currentUserGroups]);

	$event = new Event(
		'intranet',
		'onUserAdminRigths',
		[
			'originatorId' => $currentUserId,
			'userId' => $userId,
			'type' => "setAdminRigths"
		]
	);
	$event->send();

	//remove rights from current admin because of limit
	if ($removeRightsFromCurrentAdmin)
	{
		$currentAdminGroups = CUser::getUserGroup($currentUserId);
		foreach ($currentAdminGroups as $groupKey => $group)
		{
			if ($group == 1 || $group == $portalAdminGroupId)
			{
				unset($currentAdminGroups[$groupKey]);
			}
		}
		$currentAdminGroups[] = $employeesGroupId;

		$user->Update($currentUserId, ['GROUP_ID' => $currentAdminGroups]);
	}

	return true;
}