1

这是我之前帖子的扩展:

活跃管理员和公寓宝石

我以为我有这个工作,但我被困住了。我Company在公共模式中有一个模型作为租户模型和Locations单个租户。这是我的活动管理员location.rb文件:

ActiveAdmin.register Location do

#Apartment::Tenant.switch!('abc')

controller do

  #Apartment::Tenant.switch!('abc')

  before_filter do

    Apartment::Tenant.switch!('abc')

    skip_authorization
    skip_policy_scope

  end

end

end

skip_authorization skip_policy_scope 来自我在 AA 中仍然存在的一些 Pundit 问题。如您所见,我尝试Apartment::Tenant.switch在几个地方添加。在控制器块内部是我可以让它工作的唯一地方。

当我加载Locations索引页面时,它工作正常,我看到了我的租户位置。问题是,如果我返回仪表板或其他页面并返回位置并调用,Apartment::Tenant.switch我会被踢回 AA 登录屏幕并且无法重新登录。我必须手动输入 AA 注销路径才能强制注销。

这很奇怪,不知道还有什么办法解决这个问题。日志没有显示太多。

我打算在这里添加一些逻辑,使用菜单下拉菜单设置会话变量等,然后Apartment::Tenant.switch在需要时调用资源页面,但到目前为止这是一个显示停止器。不知道是 Devise、Pundit、Apartment、Active Admin 还是组合。

更新

一些进展 - 尝试添加开关的输出!调用记录器调试并“解决”了问题。如果我将 switch 调用设置为变量,它也会消失:

logger.debug "Apartment Switch: #{Apartment::Tenant.switch!('abc').inspect}"    
new_tenant = Apartment::Tenant.switch!('abc')

更新 2

我之前的更新是错误的 - 问题仍然存在。我已将其范围缩小到设计。第二个switch!电话永远不会被调用,因为 Devise 会引发 401 错误并首先将您踢出。我禁用了 Devise for Active Admin,我的切换系统工作正常。我可以使用简单的公司下拉菜单和会话来即时切换租户。设计不知何故根本不喜欢这样。

这是我的 AA 文件的要点:https ://gist.github.com/jasper502/8fd16c31ee26667c5a16

4

1 回答 1

0

我可能有点晚了,但是您是否尝试过在 before_filter 上切换到“abc”之前存储当前租户,然后在 after_filter 上切换回前一个租户?

我没有尝试复制任何东西,只是一个想法

于 2016-11-17T14:59:25.563 回答