1

これは私の以前の投稿の拡張です:

アクティブな管理者とアパートメントの宝石

私はこれが機能していると思っていましたが、立ち往生しています。パブリック スキーマにCompanyテナント モデルとして、およびLocations個々のテナントにモデルがあります。これが私のActive Adminlocation.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

前回の更新は間違っていました - 問題は残っています。Deviseに絞り込みました。switch!Devise が 401 エラーをスローし、最初にあなたを追い出すため、2 番目の呼び出しは呼び出されません。Devise for Active Admin を無効にしましたが、切り替えシステムは正常に動作しています。シンプルな Company ドロップダウンとセッションを使用して、その場でテナントを切り替えることができます。Deviseはどういうわけかこれがまったく好きではありません。

ここに私のAAファイルの要点があります: https://gist.github.com/jasper502/8fd16c31ee26667c5a16

4

1 に答える 1

0

少し遅れるかもしれませんが、before_filter で「abc」に切り替える前に現在のテナントを保存してから、after_filter で前のテナントに戻すことは試しましたか?

私は何も再現しようとはしていません、ただの考えです

于 2016-11-17T14:59:25.563 に答える