3

私は Active Admin を初めて使用しますが、これまで見てきたことから、これは非常に簡単に実装できると思います。

マルチテナンシーを追加するアパートメント ジェムを含むアプリがあります。

アプリにアクティブな管理者を追加しています。Apartment は、PostgreSQL スキーマを使用してデータを分離します。たとえば、デフォルトでは、Apartment のモデルには、次のようなものを呼び出さない限り、「パブリック」テナントがありますApartment::Tenant.switch!('abc')

私のアプリでは、モデルUserCompanyモデルはパブリック テナントにあり、それ以外はすべてテナントにあります。したがって、テナント モデルにレコードが表示されないことを除いて、既定の Active Admin は正常に動作します。

Apartment::Tenant.switch!('abc')AA モデル ファイルの 1 つを手動で追加したところ、問題なく動作しました。理想的なソリューションは次のとおりです。

  • テナントのAdminUserログがデフォルトに設定されたとき (最初のテナントなど)
  • テナント化された各モデルには、パラメーター (?tenant=abc) を送信する選択メニューがあり、その後テナントが変更されます。
  • アクティブなテナントはおそらくAdminUserセッション ストアに保持されるため、切り替えが必要になるまで同じテナント データで作業できます。

私はこれを自分で簡単に行うことができると思いますが、対処する必要がある Active Admin 固有の問題があるかどうかを確認したかったのです。

  • AA にはアプリケーション コントローラに相当するものがありますか? メインのロジックとは対照的に、テナントの切り替えロジックをそこに保持しておくとよいでしょう。
  • 代替の AA DeviseAdminUserには、別のセッション変数ストアがありますよね?

任意の提案をいただければ幸いです-整理したら、最終的なソリューション/コードをこの投稿に投稿します。

4

1 に答える 1

0

AA にはアプリケーション コントローラに相当するものがありますか? メインのロジックとは対照的に、テナントの切り替えロジックをそこに保持しておくとよいでしょう。

実際、ActiveAdmin::BaseController はありますが、gem の作成者はそれをカスタマイズに使用することについて話しません。理由はわかりません。あなたが話しているロジックには最適な場所のようです。

これまで変更する必要はありませんでしたが、変更した人のブログ記事を次に示します。

別の AA Devise AdminUser には、別のセッション変数ストアが用意されています。

うーん。Devise はセッション管理に Warden を使用します。これは、同時にログインした複数のユーザーの「スコープ」個別のセッション データをサポートします。コードを掘り下げたときにメモリが機能する場合、Warden は個別のセッション データを別のキーに配置します。同じクッキー。これが意図したものかどうかはわかりませんが、現在 ActiveAdmin を使用している Rails プロジェクトでは、ユーザーと管理者で異なる Cookie を使用していないことを確認しました。

決定的な答えではありませんが、ボールを動かしてください!

于 2016-01-07T21:39:12.177 に答える