403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/socialnetwork/lib/helper/workgroup/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/ilovecveti.ru/bitrix/modules/socialnetwork/lib/helper/workgroup/access.php
<?php

/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage socialnetwork
 * @copyright 2001-2022 Bitrix
 */
namespace Bitrix\Socialnetwork\Helper\Workgroup;

use Bitrix\Main\Config\Option;
use Bitrix\Socialnetwork\Permission\GroupAccessController;
use Bitrix\Socialnetwork\Permission\GroupDictionary;
use Bitrix\Socialnetwork\Permission\Model\GroupModel;
use Bitrix\Socialnetwork\Helper;
use Bitrix\Socialnetwork\Item\Workgroup\AccessManager;
use Bitrix\Socialnetwork\UserToGroupTable;
use Bitrix\Socialnetwork\WorkgroupTable;

class Access
{
	public static function isRuleEnabled(string $rule = ''): bool
	{
		if (empty($rule))
		{
			return Option::get('socialnetwork', 'group_access_rules_enabled', 'Y') === 'Y';
		}

		return Option::get('socialnetwork', 'group_access_rules_enabled_rule_'. $rule, 'Y') === 'Y';
	}

	public static function canCreate(array $params = []): bool
	{
		$siteId = (string)($params['siteId'] ?? SITE_ID);
		$userId = (int)($params['userId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::CREATE))
		{
			return GroupAccessController::getInstance($userId)
				->check(GroupDictionary::CREATE, GroupModel::createFromArray(['siteIds' => [$siteId]]));
		}

		$checkAdminSession = (bool)($params['checkAdminSession'] ?? true);

		return (
			\CSocNetUser::isCurrentUserModuleAdmin(SITE_ID, $checkAdminSession)
			|| (\CMain::getGroupRight('socialnetwork', false, 'Y', 'Y', [ $siteId, false ]) >= 'K')
		);
	}

	public static function canView(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$currentUserId = (int)($params['userId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::VIEW))
		{
			return GroupAccessController::can($currentUserId, GroupDictionary::VIEW, $groupId);
		}

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

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

		$checkAdminSession = (bool)($params['checkAdminSession'] ?? true);

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID', 'VISIBLE' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$currentUserRelation,
			$currentUserRelation,
			[],
			[
				'checkAdminSession' => $checkAdminSession,
			]
		);

		return $accessManager->canView();
	}

	public static function canModify(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$currentUserId = (int)($params['userId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::UPDATE))
		{
			return GroupAccessController::can($currentUserId, GroupDictionary::UPDATE, $groupId);
		}

		$checkAdminSession = (bool)($params['checkAdminSession'] ?? true);

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

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$currentUserRelation,
			$currentUserRelation,
			[],
			[
				'checkAdminSession' => $checkAdminSession,
			]
		);

		return $accessManager->canModify();
	}

	public static function canUpdate(array $params = []): bool
	{
		return static::canModify($params);
	}

	public static function canDelete(array $params = []): bool
	{
		return static::canModify($params);
	}

	public static function canSetOwner(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = (int)($params['userId'] ?? 0);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::SET_OWNER))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::SET_OWNER,
				$groupId,
				['userId' => $userId]
			);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canSetOwner();
	}

	public static function canSetScrumMaster(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? null);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::SET_SCRUM_MASTER))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::SET_SCRUM_MASTER,
				$groupId,
				['userId' => $userId]
			);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canSetScrumMaster();
	}

	public static function canDeleteOutgoingRequest(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? null);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::DELETE_OUTGOING_REQUEST))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::DELETE_OUTGOING_REQUEST,
				$groupId,
				['userId' => $userId]
			);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID', 'INITIATE_PERMS' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID', 'INITIATED_BY_TYPE', 'INITIATED_BY_USER_ID' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canDeleteOutgoingRequest();
	}

	public static function canDeleteIncomingRequest(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? null);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::DELETE_INCOMING_REQUEST))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::DELETE_INCOMING_REQUEST,
				$groupId,
				['userId' => $userId]
			);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'GROUP_ID', 'INITIATED_BY_TYPE', 'INITIATED_BY_USER_ID' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canDeleteIncomingRequest();
	}

	public static function canProcessIncomingRequest(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? null);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::PROCESS_INCOMING_REQUEST))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::PROCESS_INCOMING_REQUEST,
				$groupId,
				['userId' => $userId]
			);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID', 'INITIATE_PERMS' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'GROUP_ID', 'INITIATED_BY_TYPE' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canProcessIncomingRequest();
	}

	public static function canExclude(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? null);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::EXCLUDE))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::EXCLUDE,
				$groupId,
				['userId' => $userId]
			);
		}

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID', 'INITIATE_PERMS' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID', 'AUTO_MEMBER' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canExclude();
	}

	public static function canJoin(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::JOIN))
		{
			return GroupAccessController::can($userId, GroupDictionary::JOIN, $groupId);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'VISIBLE' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID', 'INITIATED_BY_TYPE' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			null,
			$currentUserRelation
		);

		return $accessManager->canJoin();
	}

	public static function canLeave(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::LEAVE))
		{
			return GroupAccessController::can($userId, GroupDictionary::LEAVE, $groupId);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'PROJECT', 'SCRUM_MASTER_ID' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID', 'AUTO_MEMBER' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			null,
			$currentUserRelation
		);

		return $accessManager->canLeave();
	}

	public static function canSetModerator(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? null);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::SET_MODERATOR))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::SET_MODERATOR,
				$groupId,
				['userId' => $userId]
			);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canSetModerator();
	}

	public static function canRemoveModerator(array $params = []): bool
	{
		$groupId = (int)($params['groupId'] ?? 0);
		$userId = ($params['userId'] ?? null);
		$currentUserId = (int)($params['fromUserId'] ?? Helper\User::getCurrentUserId());

		if (static::isRuleEnabled(GroupDictionary::REMOVE_MODERATOR))
		{
			return GroupAccessController::can(
				$currentUserId,
				GroupDictionary::REMOVE_MODERATOR,
				$groupId,
				['userId' => $userId]
			);
		}

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

		$group = WorkgroupTable::getList([
			'filter' => [
				'=ID' => $groupId,
			],
			'select' => [ 'ID', 'CLOSED', 'PROJECT', 'SCRUM_MASTER_ID' ],
		])->fetchObject();
		if (!$group)
		{
			return false;
		}

		$targetUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $userId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$currentUserRelation = UserToGroupTable::getList([
			'filter' => [
				'=GROUP_ID' => $groupId,
				'=USER_ID' => $currentUserId,
			],
			'select' => [ 'ID', 'ROLE', 'USER_ID', 'GROUP_ID' ],
		])->fetchObject();

		$accessManager = new AccessManager(
			$group,
			$targetUserRelation,
			$currentUserRelation
		);

		return $accessManager->canRemoveModerator();
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit