Wie erhalten Sie mit Authlogic und STI Aktionsstufeschutz?
-
20-09-2019 - |
Frage
Angesichts der Tatsache, dass es gut dokumentiert ist, wie man vorhat vor_filter für eine einzelne Benutzerklassifizierung verwendet, habe ich Probleme mit dem Schutz von Aktionsebene für mehrere Benutzertypen. Lassen Sie mich erklären:
Ich habe so etwas ...
class ApplicationController < ActionController::Base
class << self
attr_accessor :standard_actions
end
@standard_actions = [:index, :show, :new, :edit, :create, :update, :destroy]
def require_guardian
unless current_user and current_user.is_a?(Guardian)
store_location
redirect_to home_url
return false
end
end
def require_admin
unless current_user and current_user.is_a?(Administrator)
store_location
redirect_to register_url
return false
end
end
end
Und im GuardiansController möchte ich nur die Standardaktionen für den Administrator zulassen, aber alle anderen Aktionen sollten Guardian erfordern. Also habe ich es versucht ...
class GuardiansController < ApplicationController
before_filter :require_admin, :only => ApplicationController::standard_actions
before_filter :require_guardian, :except => ApplicationController::standard_actions
...
end
Was letztendlich eine rekursive Umleitung durchführt. Es muss einen besseren Weg geben?
Lösung
OK, dies ist ein weiterer Fall, in dem es nicht sorgfältig schaut und etwas fehlt. Ich hatte versehentlich die Route eingerichtet, um den Benutzer auf rekursive Weise umzuleiten. Die obige Lösung funktioniert gut, wenn Sie die Routen richtig einstellen:
def require_guardian
unless current_user and current_user.is_a?(Guardian)
store_location
# this route (home_url) sent the user to another controller which ran a before_filter sending them back here again.
# redirect_to home_url
# So I changed it to a neutral route and it works great!
redirect_to register_url
return false
end
end