Сессии, несколько вкладок и мультитенантная база данных - PullRequest
2 голосов
/ 06 августа 2011

Я работаю над мультитенантным приложением в CodeIgniter. Сессии обрабатываются надежно через базу данных. И user_id, и company_id хранятся в сеансе сервера, и большинство таблиц имеют поля company_id (который относится к полю id в таблице компаний) и поля user_id. Когда элемент сохраняется или обновляется в базе данных, company_id из сеанса автоматически добавляется к запросу и заполняется в базе данных.

Допустим, пользователь А имеет доступ как к CompanyA (company_id 1), так и к CompanyB (company_id 2). Он открывает CompanyA в своем браузере и открывает форму, чтобы сохранить новый продукт для этой компании. Непосредственно перед тем, как нажать «Сохранить», он открывает в браузере вторую вкладку и переключается на CompanyB. Это означает, что сеанс для company_id будет изменен на сервере. Теперь он возвращается к первой вкладке и нажимает сохранить - он думает, что сохраняет продукт для CompanyA, но на самом деле сеанс сервера изменился, и он сохраняется в CompanyB.

Я думаю, что это создание теории правильно. Если это так, как лучше обойти это? Единственный способ, о котором я могу подумать, - это использовать скрытое поле company_id в каждой отдельной форме.

1 Ответ

0 голосов
/ 07 августа 2011

У вас есть три варианта: Установите идентификатор компании в скрытом поле, Установите токен для формы, которая ссылается на сеанс, или передайте идентификатор компании в URL.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...