Мы разработали веб-приложение (PHP & Mysql), который в настоящее время является одним клиентом, то есть пользователи с разными уровнями разрешений являются частью одной компании и, таким образом, имеют доступ к одним и тем же данным.
В настоящее время мы планируем преобразовать его в платформу с несколькими клиентами, то есть разные группы пользователей должны иметь доступ к разным наборам данных.
Очевидным способом является разделение данных путем добавления столбца «владелец» во все таблицы MySql, которые содержат данные о клиентах. Сложная часть заключается в изменении всего кода PHP, чтобы учесть дополнительный параметр.
Наша идея состоит в том, чтобы предварительно фильтровать данные по столбцу «владелец», чтобы все последующие запросы всегда и только выбирали данные, относящиеся к подключенному клиенту. Таким образом, нам не нужно изменять каждый запрос в нашем коде (имена таблиц в запросах уже параметризованы).
Можно ли это сделать с помощью временных таблиц? У нас есть собственный класс PHP, который обрабатывает все запросы к базе данных, и наша идея заключалась в том, чтобы заставить его реплицировать данные подключенного клиента во временные таблицы при каждом создании объекта класса. Запросы запросов будут автоматически перенаправляться во временные таблицы вместо исходных таблиц, в то время как операции вставки, обновления и удаления будут выполняться над исходными. Это выполнимый метод или мы столкнемся с проблемой? Производительность, конечно, проблема здесь.
Любые другие предложения о том, как справиться с этим?
Дополнительная информация: вход в систему и аутентификация пользователей осуществляется PHP, который устанавливает несколько переменных сеанса, касающихся учетной записи. Учетные записи пользователей хранятся в таблице «user» в той же базе данных, где хранятся данные, которые пользователь будет запрашивать / редактировать.
Итак, после входа в систему мы имеем переменную $ _SESSION [ ‘владелец’] это будет доступно на протяжении всего проекта и будет использоваться для идентификации записей, которые пользователь может видеть / редактировать.
Если вам требуется, чтобы пользователь вошел в систему, используя значение «user», вы можете создать таблицу соединения с владельцем и пользователем (и мне нравится добавлять активный флаг, только для&г). На самом деле нет хорошего способа добавить временные таблицы или представления, потому что каждый «владелец» будет иметь представление. Существует своего рода решение. Вы можете создать представление на основе таблицы, которая присоединяется к таблице «owner» в user (). Так, например, если у меня есть таблица с именем usertemp (user varchar (40), owner varchar (45)) и мое имя пользователя ‘biff’ (и оно существует в таблице), я могу построить представление:
create view usertemp_v
as
select user, owner
from usertemp
where user=user();
Затем я могу запросить представление:
select *
from usertemp_v;
Все, что я увижу, — это данные, с которыми связано мое имя. Пожалуйста, поймите, однако, что это требует, чтобы вы либо установили переменную для пользователя, либо чтобы пользователи имели индивидуальный вход в MySQL. Также необходимо, чтобы разрешения (IP-адрес или домен) также присутствовали в таблице owner_users (если используется user ()).
Затем мне нужно присоединиться к вашим основным исходным таблицам для владельца, к которому я присоединяюсь в usertemp.
Других решений пока нет …