Какой самый безопасный способ делиться объектами PHP - PullRequest
0 голосов
/ 26 марта 2012

Я должен поделиться экземпляром объекта конфигурации в PHP. Этот объект содержит имя пользователя БД и пароль БД. Пользователь БД может измениться. Поэтому я должен поделиться экземпляром объекта.

Пример.

Пользователь БД по умолчанию - «по умолчанию». по умолчанию имеет только права на ВЫБОР данных из БД.

Когда пользователь веб-сайта входит в систему как администратор, пользователь db должен измениться на «admin». Администратор имеет права на ВЫБОР, ОБНОВЛЕНИЕ, УДАЛЕНИЕ и т. д.

Когда веб-пользователь входит в систему как обычный пользователь, пользователь db должен перейти на «обычный» нормальный пользователь с правами SELECT, UPDATE и т. Д.

Я должен поделиться экземпляром конфигурации. Какой самый безопасный способ поделиться этим объектом?

1 Ответ

0 голосов
/ 26 марта 2012

Вы можете использовать шаблон синглтона , чтобы сохранить один экземпляр доступным из любого места в вашем приложении.

Я также предлагаю вам использовать в качестве обработчика соединений синглтон, в котором вы можете получать, устанавливать и поддерживать соединения, в которых вы также сохраняете учетные данные для входа.

Пример:

<?php
class ConnectionManager
{
    private $hostname;
    private $username;
    private $password;

    private $connections = array();

    private static $instance = null;

    public static function getInstance ()
    {
        if (self::$instance == null)
            self::$instance = new self();
        return self::$instance;
    }

    private function __construct ()
    {}

    public function newConnection ($name, $database)
    {
        // Connect to database using predefined credentials

        $this->connections[$name] = new PDO();
    }

    public function __get ($name)
    {
        if (!array_key_exists($name, $this->connections))
            die("Could not get connection: $name");

        return $this->connections[$name];
    }
}

// Create a new connection named database1
ConnectionManager::getInstance()->newConnection('database1', 'database_name');

// Load connection database1
ConnectionManager::getInstance()->database1->prepare("SELECT * FROM table");
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...