在Active Admin中切换公寓租户

时间:2016-02-13 09:33:16

标签: ruby-on-rails devise activeadmin pundit apartment-gem

这是我上一篇文章的扩展名:

Active Admin and the Apartment Gem

我以为我有这个工作,但我被卡住了。我在公共模式中使用Company模型作为租户模型,并在单个租户中使用Locations。这是我的Active Admin 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还是组合。

更新

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

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

更新2

我之前的更新是错误的 - 问题仍然存在。我把它缩小到了Devise。第二个switch!调用永远不会被调用,因为Devise会抛出一个401错误并首先将你踢出去。我禁用Devise for Active Admin,我的交换系统工作正常。我可以使用简单的公司下拉菜单和会话来动态切换租户。不知何故设计完全不喜欢这个。

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

1 个答案:

答案 0 :(得分:0)

我可能会有点迟到,但您是否尝试在切换到before_filter上的'abc'之前存储当前租户,然后在after_filter上切换回上一个租户?

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

相关问题