Bei Verwendung des CanCan-Adapters in ActiveAdmin 0.6.0. Ich habe eine Ressource arbeiten und Autorisierung funktioniert. Wenn ich jedoch zu /admin
gehe, wird die Seite ActiveAdmin für den Stamm auf /admin
umgeleitet und wird für immer fortgesetzt.ActiveAdmin mit CanCanAdapter verursacht unendliche Weiterleitung im Dashboard
Antwort
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.
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 inapplication_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
Dies ist die richtige Lösung. Leider scheint das Wiki es nicht mehr zu erwähnen. Es funktioniert in ActiveAdmin 0.6.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 –
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.
Sieht so aus, als würden Sie eine AA-Pull-Anfrage ausgeben. – renegade