7

メインの管理インターフェイスとして ActiveAdmin を使用してマルチテナント アプリを構築しています。私はacts_as_tenant gemを使ってデータをうまく分離しました。

すべてのユーザーのユーザー モデル オブジェクトとして AdminUser モデルを使用しました。

他のユーザーを追加するために、AdminUser のスコープもテナントに限定されます。

ActiveAdmin/Devise が認証を試みると、以下に示すように最初に find_tenant フィルターにヒットしていると想定されるため、これはログインを無効にします。

class ApplicationController
  set_current_tenant_through_filter

  before_filter :find_tenant

  def find_tenant
     if admin_user_signed_in?
      set_current_tenant(Company.find(current_admin_user.company_id))
     end
  end

これを回避する方法がわからない... ユーザーにログインしてもらい、アプリケーションがログインしたユーザーから company_id を取得してテナントを設定し、ActiveAdmin に表示されるすべてのデータがそのテナントを介してスコープされます (この部分は、 act_as_tenant gem (ログインを通過できる場合)。

ありがとう

4

2 に答える 2

1

あなたの疑いは正しいと思います。認証の前にfind_tenantメソッドが呼び出され、admin_user_signed_inになっていると思いますか? 偽であること。代わりに、after フィルターを使用するように調整すると、うまくいくはずです ( http://guides.rubyonrails.org/action_controller_overview.html#after-filters-and-around-filtersから)。

class ApplicationController
  set_current_tenant_through_filter

  after_filter :find_tenant

  def find_tenant
    if admin_user_signed_in?
      set_current_tenant(Company.find(current_admin_user.company_id))
    end
  end

set_current_tenant_through_filter がこれらすべてにどのように機能するかわかりません。同じことを 2 つの異なる方法で実行しようとしていますか?

于 2012-09-04T05:14:03.747 に答える