Как расширить Adminer для поддержки баз данных SQLite при входе в систему?

Я использую сервер, на котором размещены как экземпляр MySQL (с несколькими базами данных), так и несколько файлов SQLite. Я хотел бы использовать Adminer для управления всеми из них, при условии, что действительные учетные данные предоставлены пользователями. Кроме того, список баз данных должен быть заполнен.

В случае MySQL могут использоваться действительные пользователи базы данных, и соединение работает "из коробки". Тем не менее, поддержка SQLite должна быть добавлена ​​явно. Администратор выдает эту ошибку:

Implement login() method to use SQLite.
  • Как мне продлить Adminer класс для включения входа в SQLite?
  • Что я должен сделать, чтобы заполнить список действительных баз данных?

1 ответ

Решение

Этот ответ относится к Adminer версии 4.2.5. К сожалению, он не действителен для Adminer 4.3.x.

Вы должны переопределить login а также databases методы Adminer класс, убедившись, что вы делаете это только для драйвера SQLite, а не в других случаях. Следующий код обеспечивает базовую систему входа в систему со списком баз данных:

<?php
function adminer_object() {
    class AdminerSoftware extends Adminer {
        function login($login, $password) {
            global $jush;
            if ($jush == "sqlite")
                return ($login === 'admin') && ($password === 'changeme');
            return true;
        }
        function databases($flush = true) {
            if (isset($_GET['sqlite']))
                return ["/path/to/first.db", "/path/to/second.db"];
            return get_databases($flush);
        }
    }
    return new AdminerSoftware;
}
include "./adminer-4.2.5.php";

Код может быть адаптирован для поддержки нескольких пользователей. Сохраните файл как index.php в том же каталоге, где adminer-4.2.5.php расположен. Обязательно настройте имя пользователя, пароль и пути к базам данных.

Вот несколько важных замечаний:

  • login метод не имеет правильного имени, это начальная проверка, выполненная администратором
  • для баз данных, которые имеют встроенную пользовательскую функциональность, например MySQL, этот метод должен всегда возвращать true как в оригинальном классе
  • Файлы SQLite не имеют встроенной аутентификации, поэтому мы определяем искусственную проверку, чтобы предотвратить несанкционированный доступ

Результат

Список баз данных SQLite, отображаемых администратором

Другие вопросы по тегам