背景
Magento 的产品详细信息页面可在 catalog/product/view/id/{product_id} 访问。它很快就被托管在 magento 云上。有不同的客户群,每个客户群可以在产品详情页面上看到不同的价格。我通常会打开两个选项卡,在一个选项卡上,我将注销属于与客户组 A 关联的客户的帐户,然后登录到属于与客户组 B 关联的客户的帐户。每次我这样做,我需要做的就是刷新包含产品详细信息页面的第二个选项卡,价格就会改变。这很好,这是预期的行为
问题
我现在处于一种情况,我需要能够在后端的 Magento 管理表单中从某个客户组中删除对产品的访问权限,一旦完成,属于该客户组的客户应该不再是假设页面已经在他/她的浏览器中打开,则能够在刷新后访问前端的该产品页面。事实证明这很难做到。
请注意,此代码在我的开发环境中有效,并且 Varnish 也已启用并在我的开发环境中有效。快速似乎只是在 magento 云暂存环境中缓存不同。
我做过的事情
我通过添加一个实现Magento\Framework\DataObject\IdentityInterface
. 此标签是客户组 ID 和对正在加载的产品的访问状态的串联。如果访问被撤销,状态为 0,否则状态为 1。
我添加了一个before
插件Magento\Framework\App\Http\Context::getVaryString()
,这个before
插件还添加了客户组 ID 和访问状态的相同连接。我相信这就是唯一标识页面的每个缓存版本的速度。
这些都没有奏效。
我的问题
如果在我切换用户帐户时快速运行良好,为什么在需要考虑其他上下文时它不能运行?
在将页面提供给网络用户之前,如何快速检查用户是否仍然有权访问该产品页面?
如何快速知道当前用户会话何时发生变化?也许我可以应用相同的方法来撤销访问权限。