2013-07-02 13 views

Antwort

12

Wenn der Benutzer keinen Zugriff auf eine Seite hat, leitet ActiveAdmin zum Dashboard um. Wenn der Benutzer keinen Zugriff auf das Dashboard hat, führt dies zu einer unendlichen Umleitung.

Die Lösung besteht darin, dem Benutzer die Möglichkeit zu geben, die Dashboard-Seite zu lesen. Legen Sie diese in der Fähigkeit Modellobjekt:

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

Dies ist in der authorization adapter documentation erwähnt, aber die unendliche Umleitung scheint durch schlechtes Design in ActiveAdmin verursacht werden. Es wird weder ein CanCan :: AccessDenied ausgelöst noch eine Nachricht für den Benutzer angezeigt. Zumindest sollte eine Meldung in Entwicklung angezeigt werden, die bei der Behebung dieses Problems behilflich ist. Aber momentan nicht.

+0

Sieht so aus, als würden Sie eine AA-Pull-Anfrage ausgeben. – renegade

5

Sie können die Konfigurationsoption config.on_unauthorized_access wie beschrieben here verwenden.

# 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 

Verfahren access_denied würde in application_controller.rb definiert werden. Hier ist ein Beispiel, das den Benutzer von der Seite umleitet, auf die er nicht zugreifen darf, auf eine Ressource, auf die er zugreifen darf (in diesem Fall Organisationen), und zeigt außerdem die Fehlermeldung im Browser an:

Klasse ApplicationController < Action :: Base

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

Ende

+0

Dies ist die richtige Lösung. Leider scheint das Wiki es nicht mehr zu erwähnen. Es funktioniert in ActiveAdmin 0.6.0 –

+0

Ich erstellte Pull-Anfrage, um diese in Active_admin.rb Initialisierer zu setzen. Kommentiere +1, wenn du denkst, dass es dort enthalten sein sollte. Hier ist der Link: https://github.com/gregbell/active_admin/pull/2471 –

1

hatte ich den gleichen Fehler, und ich habe einen Admin-Benutzer mit:

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

Ich habe gerade vergessen, die richtige Rolle zu diesem Benutzer hinzuzufügen, vielleicht hat jemand die gleiche unendliche Umleitungsschleife wie ich mit ActiveAdmin und Cancan.