これは私の以前の投稿の拡張です:
私はこれが機能していると思っていましたが、立ち往生しています。パブリック スキーマに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