我正在使用CodeIgniter中的多租户应用。会话通过数据库安全处理。 user_id和company_id都存储在服务器会话中,并且大多数表具有company_id(与公司表中的id字段相关)和user_id字段。将项目保存或更新到数据库中时,会话中的company_id将自动附加到查询中,并填充到数据库中。
假设UserA可以访问CompanyA(company_id 1)和CompanyB(company_id 2)。他在浏览器中打开了CompanyA,并打开了一个表单,为该公司保存了一个新产品。就在他点击保存之前,他在浏览器中打开了第二个标签,然后切换到CompanyB。这意味着company_id的会话将在服务器上更改。现在,他回到第一个标签,点击保存 - 他认为他正在为CompanyA保存一个产品,但实际上服务器会话已经改变,并保存到CompanyB。
我认为这种理论制定是正确的。如果是,最好的方法是什么?我能想到的唯一方法是在每种形式中使用隐藏的company_id字段。
答案 0 :(得分:0)
您有三种选择: 在隐藏字段上设置公司ID, 为引用会话的表单设置令牌或在URL上传递公司ID。
我相信正确的approch但不是最简单的是传递一个令牌,所以你可以将它扩展到所有需要它的表单,在Zend你有一个Zend_Form_Element_Hash
,我不知道CodeIgnitier但是你可能有类似的东西。