За последние пару лет я разработал очень настроенное приложение PHP/MySQL, которое используется для нескольких клиентов. Я создаю новую базу данных и новую установку для каждого клиента до этого момента.
Первая очевидная проблема заключается в том, что обновление нескольких установок происходит с любыми изменениями кода; Вторая проблема заключается в том, что каждая установка имеет большое количество пользователей; и для большинства клиентов; некоторые из этих пользователей одинаковы - и они должны иметь несколько отдельных учетных записей пользователей и URL-адресов, которые нужно запомнить.
Я переношу приложение на Laravel 5 на данный момент и рассматриваю лучшую реализацию для многопользовательской аренды; поэтому вы ищете небольшой совет по наилучшей реализации. Раньше я использовал Laravel, но я не эксперт.
Это то, что я думаю о настройке.
1 Основная база данных, которая содержит таблицы для:
- Вся информация об учетной записи пользователя
- Таблица контроля доступа - какие установки доступны пользователям; что их уровень пользователя на этой установке.
- Таблица конфигурации для каждой установки - информация о подключении базы данных, базовая конфигурация и т.д.
Затем отдельная база данных для каждой установки, которая содержит всю информацию, необходимую для этой установки и отправленную ей.
Идеальная настройка заключается в том, что пользователь может перейти к субдомену i.e installationname.appname.com; войдите в систему с данными своего главного входа и автоматически перейдите к необходимой установке; ИЛИ зайдите в appname.com, войдите в систему, а затем выберите, к какой установке подключиться.
Мои вопросы:
- Это лучшее соглашение для достижения того, что я ищу.
- Какой лучший способ для хранения какой установки пользователь ищет (переменная сеанса)
- Могу ли я определить модель между двумя базами данных - возможно, определите одно соединение в качестве основного соединения, а затем динамически определите другое соединение, используя информацию о соединении с базой данных в основной базе данных, чтобы подключиться к правильной установке. - система часто должна проверять информацию пользователя для уровня доступа и т.д.
Я уверен, что есть много проблем, о которых я не думал; но если у кого есть какие-либо ссылки или руководства, которые могут помочь, это будет здорово. Первый раз, задавая вопрос о SO, но нашел в прошлом огромное количество исследований, поэтому благодаря сообществу!
ОБНОВЛЕНИЕ. Поэтому я думаю, что у меня есть способ сделать эту работу сейчас; используя отдельные базы данных, как указано выше; set
protected $connection = 'tenant_connection'
в моделях, относящихся к содержимому базы данных, специфичной для арендатора.
Затем где-то в файле заголовка устанавливается доступное tenant_connection на основе переменной сеанса, которая была установлена в login/by subdomain.
$tenant = Installation::where('installation', '=', $session['installation'])->first();
Config::set('database.connections.tenant_connection', array('driver' => 'mysql', 'host' => $tenant->db_hostname, 'username' => $tenant->db_username)... etc.
Предполагая, что отношения будут работать через соединения; Я не понимаю, почему это не сработает; просто нужно разработать лучшее место для установки подключения арендатора.