Ich versuche, meine Authentifizierung/Berechtigungen Code ein wenig prägnanter zu machen.Wie kann ich eine before_filter-Funktion je nach Aktion unterschiedlich verhalten?
Zur Zeit habe ich dies:
def index
require_role "normal" do
@projects = Project.all
respond_to do |format|
format.html
end
end
end
wo require_role
Griffe Berechtigungen und Umleitung auf eine Fehlerseite zu überprüfen, ob Sie versuchen, nicht etwas, das Sie sollten zu tun.
Ich möchte in der Lage sein, genau wie dieser von jedem Controller an der Spitze etwas zu setzen:
require_role "admin", [:delete]
require_role "normal", [:edit, :new, :create]
require_role "guest", [:show, :index]
definierte so etwas wie:
def self.require_perm(role_name, actions)
before_filter :require_perm_admin, :only => actions
end
Das einzige Problem ist, dass ich zu Hard-Code den Namen der Methode, require_perm_admin
. Das heißt, wenn ich neue Rollen hinzufügen würde, müsste ich für jede eine Methode definieren.
Ist es möglich, dynamisch benannte Methoden zu einer Klasse hinzuzufügen? z.B. "check_role_admin", "check_role_guest" etc.
Kann ich sonst sagen, welche Aktion innerhalb meiner before_filter
Funktion aufgerufen werden soll?
Perfect! Wo ist dieses Zeug dokumentiert? Ich scheine eine Menge Zeit damit zu verbringen, nur zu suchen und nie zu finden ... –
Sie machen einen guten Punkt: Ich weiß nicht, ob es ist. Es ist eine geschützte Instanzvariable, also glaube ich nicht, dass es sogar in der API-Dokumentation ist :( –
Eigentlich ist es hier dokumentiert: http://guides.rubyonrails.org/action_controller_overview.html#routing-parameters –