Benutzerdefinierte Routen und deklarative Genehmigung
-
24-10-2019 - |
Frage
Ich weiß nicht, ob dies schon einmal beantwortet wurde.
Haben benutzerdefinierte Routen zu Benutzern. Wenn ich direkt auf den Benutzer zugriff /Benutzer /5 alles funktioniert. Wenn ich es versuche /Profil oder sogar /Benutzer /current_user mit deklarativer Autorisierung, erhalte ich "Ich kann keinen Benutzer ohne ID finden".
map.profile "profile", :controller => "users", :action => "show"
map.edit_profile 'profile/edit', :controller => 'users', :action => 'edit', :conditions => { :method => :get }
Mein Anwendungscontroller hat
vor_filter {| c | Autorisierung.Current_User = C.Current_User}
und meine Authorization_RULES hat user.id und ausprobiert Current_User.id.
role :user do
includes :guest
has_permission_on :users, :to => [:show, :edit ] do
if_attribute :id => is { user.id }
end
end
Was mache ich falsch?
Lösung
Für benutzerdefinierte Indextyprouten verwenden Sie
filter_access_to: alle
Statt
filter_resource_access
Ich habe mich auch gehabt.
Andere Tipps
Ich benutze Authlogic, aber soweit ich weiß, wird "current_user" nicht über eine Route zugänglich sein.
Sie müssten im Controller prüfen, ob Params [: id] == "current_user" (als Zeichenfolge) und dann eine Logik basierend auf diesem ... dh:
if params[:id] == "current_user"
@user_id = current_user.id
else
@user_id = params[:id]
end
@user = User.find(@user_id)
Ein sehr simple Beispiel, aber es sollte die Art der Logik veranschaulichen, die Sie benötigen, um den Current_User von einer benutzerdefinierten Route zu holen. Sie können auch nur eine benannte Route für Current_User auf seine eigene Controller -Aktion zuordnen, aber das ist nicht sehr erholsam und würde [höchstwahrscheinlich] die Funktionalität, die Sie bereits haben, duplizieren.