2012-07-11 6 views
7

Sto costruendo un'app multi-tenant con ActiveAdmin come interfaccia di amministrazione principale. Ho usato la gemma act_as_tenant per ottenere dati separati.Multi Tenant, Multi Admin Users in ActiveAdmin

Ho utilizzato il modello AdminUser come oggetto modello utente per tutti gli utenti.

Per aggiungere altri utenti, AdminUser ha anche ambito per l'inquilino.

Questo sta gettando via il login, perché quando ActiveAdmin/Devise tenta di autenticare, suppongo che viene prima colpendo il filtro find_tenant come illustrato di seguito:

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 

Non sei sicuro di come ottenere intorno a questo ... Voglio che l'utente effettui il login e quindi l'applicazione prende il company_id dall'utente loggato e imposta il titolare e tutti i dati mostrati su ActiveAdmin vengono esaminati tramite quel tenant (questa parte funziona bene attraverso la gemma act_as_tenant se riesco a superare il login) .

Grazie

risposta

0

Credo che i vostri sospetti sono corretti, e che il metodo find_tenant viene chiamato prima che l'autenticazione, con conseguente admin_user_signed_in? essere falso La regolazione per utilizzare un filtro successivo, invece, dovrebbe fare il trucco, se questo è davvero il caso (da 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 

Non sono sicuro di come set_current_tenant_through_filter funziona in tutto questo, stai cercando di fare la stessa cosa due modi diversi?