Quando si utilizza l'adattatore CanCan in ActiveAdmin 0.6.0. Ho una risorsa che funziona e l'autorizzazione funziona. Tuttavia, quando vado a /admin
, la pagina root ActiveAdmin, reindirizza a /admin
e continua così per sempre.ActiveAdmin con CanCanAdapter che causa il reindirizzamento infinito sul dashboard
risposta
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.
È 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 inapplication_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
Questa è la soluzione corretta. Sfortunatamente, il Wiki non sembra menzionarlo più. Funziona in ActiveAdmin 0.6.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 –
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.
Sembra che invierai una richiesta di pull AA. – renegade