• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/Access/Install/AccessInstaller.php
  • Класс: BitrixCatalogAccessInstallAccessInstaller
  • Вызов: AccessInstaller::fillDefaultSystemPermissions
private function fillDefaultSystemPermissions(array $roles = null): void
{
	$map = RoleMap::getDefaultMap();

	if ($roles !== null)
	{
		$map = array_intersect_key($map, array_flip($roles));
		if (!$map)
		{
			return;
		}
	}

	$query = [];
	$roleNameIdMap = [];
	foreach ($map as $roleName => $roleClass)
	{
		if (is_subclass_of($roleClass, RoleBase::class))
		{
			$roleMapItem = new $roleClass();
		}
		else
		{
			continue;
		}

		$role = RoleTable::add([
			'NAME' => $roleName
		]);

		if (!$role->isSuccess())
		{
			continue;
		}

		$roleId = $role->getId();
		$roleNameIdMap[$roleName] = $roleId;
		foreach ($roleMapItem->getMap() as $item)
		{
			$query[] = new SqlExpression(
				'(?i,?,?)',
				$roleId,
				$item['permissionId'],
				$item['value']
			);
		}
	}

	RoleUtil::insertPermissions($query);

	if (!array_intersect_key($map, array_flip([RoleDictionary::ROLE_DIRECTOR, RoleDictionary::ROLE_SALESMAN])))
	{
		return;
	}

	$userGroups = GroupTable::getList([
		'filter' => [
			'=STRING_ID' => [
				ShopGroupAssistant::SHOP_MANAGER_USER_GROUP_CODE,
				ShopGroupAssistant::SHOP_ADMIN_USER_GROUP_CODE,
			]
		],
		'select' => ['ID', 'STRING_ID']
	]);

	$defaultGroupRoleMap = [];
	while ($userGroup = $userGroups->fetch())
	{
		$role =
			$userGroup['STRING_ID'] === ShopGroupAssistant::SHOP_ADMIN_USER_GROUP_CODE && $map[RoleDictionary::ROLE_DIRECTOR]
				? $roleNameIdMap[RoleDictionary::ROLE_DIRECTOR]
				: $roleNameIdMap[RoleDictionary::ROLE_SALESMAN]
		;

		$defaultGroupRoleMap[$userGroup['ID']] = $role;
	}

	if (!$defaultGroupRoleMap)
	{
		return;
	}

	$this->fillGroupUserRoleRelations($defaultGroupRoleMap);
}