Преобразование веб-приложения для одного клиента в приложение для нескольких клиентов

0

Мы разработали веб-приложение (PHP & Mysql), которое в настоящее время является одним клиентом, то есть пользователи с разными уровнями разрешений являются частью одной и той же компании и, следовательно, имеют доступ к тем же данным. Теперь мы планируем преобразовать его в платформу с несколькими клиентами, то есть другой набор пользователей должен иметь доступ к различным наборам данных.

Очевидным способом является разделение данных путем добавления столбца "владелец" ко всем таблицам MySql, которые содержат данные клиентов. Жесткая часть меняет весь PHP-код, чтобы принять во внимание дополнительный параметр. Наша идея состоит в том, чтобы предварительно фильтровать данные по столбцу "владелец", чтобы все дальнейшие запросы на запрос всегда были и только выбирали данные относительно подключенного клиента. Таким образом, нам не нужно менять каждый запрос в нашем коде (имена таблиц в запросах уже параметризованы). Можно ли это сделать, используя временные таблицы? У нас есть собственный PHP-класс, который обрабатывает все запросы к базе данных и, как полагалось, должен был реплицировать данные подключенного клиента во временные таблицы каждый раз, когда объект класса создается. Запросы допроса будут автоматически перенаправляться в таблицы temp вместо исходных таблиц, в то время как операции вставки, обновления и удаления будут выполняться на оригинале. Является ли это приемлемым методом или мы столкнемся с трудностями? Конечно, проблема здесь. Любые другие предложения о том, как справиться с этим?

РЕДАКТИРОВАТЬ

Дополнительная информация: Логин и аутентификация пользователей обрабатывается PHP, который устанавливает несколько переменных сеанса в отношении учетной записи. Учетные записи пользователей хранятся в таблице "пользователя" в той же базе данных, где хранятся данные, которые пользователь будет допрашивать/редактировать. Поэтому после входа у нас есть переменная $ _SESSION ['owner'], которая будет доступна по всему проекту и будет использоваться для идентификации записей, которые пользователь может видеть/редактировать.

  • 0
    В зависимости от типа приложения (и клиентов) полезно обеспечить изоляцию данных, например, отдельные базы данных для каждого клиента. Вы пишете, что у вас есть параметризованные имена таблиц. Вы можете использовать подзапросы SELECT * FROM (SELECT * FROM org_tbl WHERE owner = 'aa') as tbl , хотя производительность запросов будет сильно падать. Примите, что вы должны переписать все запросы. (И помечайте исправленные, чтобы не добавлять подзапрос фильтра)
  • 0
    Количество клиентов является переменным и, надеюсь, большим, поэтому я бы исключил изоляцию данных. Переписывание всех запросов будет, конечно, нашей последней инстанцией. Временные таблицы лучше / хуже, чем подзапросы с точки зрения производительности?
Показать ещё 1 комментарий
Теги:
web-applications
webapp2

1 ответ

0

Если вам нужно, чтобы пользователь входил в систему с использованием значения "пользователь", вы можете построить таблицу соединений с владельцем и пользователем (и мне нравится добавлять активный флаг только для s & g). Там действительно нет хорошего способа добавить временные таблицы или представления, потому что каждый "владелец" будет иметь представление. Есть своего рода решение. Вы можете создать представление на основе таблицы, которая присоединяется к таблице "владелец" пользователя(). Например, если у меня есть таблица с именем usertemp (пользователь varchar (40), владелец varchar (45)), а мое имя пользователя - "biff" (и оно существует в таблице), я могу создать представление:

create view usertemp_v
as
select user, owner
from usertemp
where user=user();

Затем я могу запросить представление:

select *
from usertemp_v;

Все, что я увижу, это данные, с которыми связано мое имя. Однако имейте в виду, что для этого требуется, чтобы вы либо задали переменную для пользователя, либо что у пользователей есть отдельные логины для MySQL. Он также требует, чтобы разрешения (IP-адрес или домен) также присутствовали в таблице owner_users (при использовании пользователя()).

Затем я должен присоединиться к вашим основным исходным таблицам для владельца, к которому я присоединяюсь в usertemp.

  • 0
    Я не очень понимаю часть user = user () в представлении. На что ссылается user ()?
  • 0
    В таблице есть столбец с именем «пользователь». В mysql также есть функция для возврата текущего сеанса пользователя "user ()". По сути, я сопоставляю пользователя в «виртуальной частной строке» с текущей учетной записью пользователя. Это общее руководство. Если вашему программному обеспечению требуется другой метод для идентификации данного пользователя, вы можете заменить его (например, переменная @user).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню