2013-07-02 11 views

risposta

12

Se l'utente non ha accesso a una pagina, ActiveAdmin reindirizza a Dashboard. Se l'utente non ha accesso al dashboard, ciò comporta un reindirizzamento infinito.

La soluzione è dare all'utente la possibilità di leggere la pagina del dashboard. Mettere questo l'oggetto del modello possibilità:

can :read, ActiveAdmin::Page, :name => "Dashboard" 

Questo è menzionato nel authorization adapter documentation, ma il reindirizzamento infinito sembra essere causato dalla cattiva progettazione in ActiveAdmin. Non sta né sollevando un CanCan :: AccessDenied, né visualizzando un messaggio per l'utente. Come minimo, dovrebbe essere visualizzato un messaggio in fase di sviluppo per aiutare a risolvere questo problema. Ma non al momento.

+0

Sembra che invierai una richiesta di pull AA. – renegade

5

È possibile utilizzare l'opzione di configurazione config.on_unauthorized_access come descritto here.

# You can also specify a method to be called on unauthorized 
# access. This is necessary in order to prevent a redirect 
# loop that can happen if a user tries to access a page they 
# don't have permissions for 
# (see [#2081](https://github.com/gregbell/active_admin/issues/2081)). 
config.on_unauthorized_access = :render_403 

Procedimento access_denied sarebbe definito in application_controller.rb. Ecco un esempio che reindirizza l'utente dalla pagina che non hanno l'autorizzazione per accedere a una risorsa a cui hanno il permesso di accedere (le organizzazioni in questo caso) e visualizza anche il messaggio di errore nel browser:

class ApplicationController < ActionController :: Base

def access_denied(exception) 
    redirect_to admin_organizations_path, :alert => exception.message 
end 

fine

+0

Questa è la soluzione corretta. Sfortunatamente, il Wiki non sembra menzionarlo più. Funziona in ActiveAdmin 0.6.0 –

+0

Ho creato una richiesta di pull per inserirlo nell'inizializzatore active_admin.rb. Commenta +1 se pensi che dovrebbe essere incluso lì. Ecco il link: https://github.com/gregbell/active_admin/pull/2471 –

1

ho avuto lo stesso errore, e ho un utente amministratore con:

if user.admin? 
    can :manage, :all 
end 

Ho appena dimenticato di aggiungere il ruolo corretto a questo utente, quindi forse qualcuno avrà lo stesso ciclo di reindirizzamento infinito come me con ActiveAdmin e Cancan.