~ 2 мин

<?xml version="1.0" encoding="UTF-8"?>
<mgrdata>
  <mainmenu level="admin+">
    <modernmenu>
      <node name="Резервное копирование" type="noname" icon="m-help">
        <node name="backup.plan" action="backup.plan" type="list" favorite="yes" icon="m-backup" />
        <node name="backup.storages" action="backup.storages" favorite="yes" type="list" icon="m-backup" />
        <node name="backups" action="backups" type="list" favorite="yes" icon="m-backup" />
      </node>
    </modernmenu>
  </mainmenu>
  <lang name="ru">
    <messages name="desktop">
      <msg name="modernmenu_backup.plan">Планы резервного копирования</msg>
      <msg name="modernmenu_backups">Резервные копии</msg>
      <msg name="modernmenu_backup.storages">Хранилища</msg>
    </messages>
  </lang>
</mgrdata>
<?php

define('TE_SCRIPT_DIR', __DIR__);

function te_base_url(): string
{
  static $url = null;
  if ($url !== null) {
    return $url;
  }

  $docRoot = rtrim(str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']), '/');
  $dir = rtrim(str_replace('\\', '/', TE_SCRIPT_DIR), '/');
  $url = $dir === $docRoot ? '' : substr($dir, strlen($docRoot));

  return $url;
}

function te_asset_url(string $path): string
{
  return te_base_url() . '/' . ltrim($path, '/');
}

require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
require TE_SCRIPT_DIR . '/functions.php';

/**
* @return int[]
*/
function te_allowed_user_ids(): array
{
  static $userIds = null;
  if ($userIds !== null) {
    return $userIds;
  }

  $userIds = [];
  $configFile = TE_SCRIPT_DIR . '/config.php';
  if (is_file($configFile)) {
    $config = include $configFile;
    if (is_array($config)) {
      $userIds = array_values(array_unique(array_map('intval', $config)));
    }
  }

  return $userIds;
}

function te_require_access(bool $redirectOnDeny = true): void
{
  global $USER;

  if (!$USER->IsAuthorized()) {
    if ($redirectOnDeny) {
      LocalRedirect('/auth/');
    }
    http_response_code(403);
    die('Unauthorized');
  }

  $canAccess = $USER->IsAdmin();

  if (!$canAccess && \Bitrix\Main\Loader::includeModule('timeman') && class_exists('CTimeMan')) {
    $canAccess = CTimeMan::IsAdmin();
  }

  if (!$canAccess) {
    $canAccess = in_array((int)$USER->GetID(), te_allowed_user_ids(), true);
  }

  if (!$canAccess) {
    if ($redirectOnDeny) {
      require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_after.php';
      ShowError('Недостаточно прав для просмотра отчёта');
      require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog.php';
      die();
    }
    http_response_code(403);
    die('Access denied');
  }
}

 

Комментарии

2 комментария

Обычно отвечаю до 18:00 МСК

Вопрос по статье?

Напишите — разберём на вашем проекте.

  • 15+ лет практики
  • Ростов → РФ удалённо
Написать в Telegram Без автоответчика · пн–пт

Обсудить задачуОтвет в рабочий день

Написать