Rutas personalizadas y autorización declarativa
-
24-10-2019 - |
Pregunta
No sé si esto ha sido respondido antes.
Tener rutas personalizadas para los usuarios. Si accedo al usuario directamente /usuarios /5 todo funciona. Si intento /perfila o incluso /usuarios /current_user con autorización declarativa, obtengo "no podría encontrar el usuario sin una identificación"
map.profile "profile", :controller => "users", :action => "show"
map.edit_profile 'profile/edit', :controller => 'users', :action => 'edit', :conditions => { :method => :get }
Mi Application Controller tiene
antes_filter {| c | Authorization.Current_user = C.Current_user}
y mi autorización_rules tiene user.id y también probé current_user.id.
role :user do
includes :guest
has_permission_on :users, :to => [:show, :edit ] do
if_attribute :id => is { user.id }
end
end
¿Qué estoy haciendo mal?
Solución
Para rutas de tipo de índice personalizado, uso
filter_access_to: todos
Más bien que
filter_resource_access
me tengo también.
Otros consejos
Utilizo AuthLogic, pero hasta donde sé, "Current_User" no será accesible a través de una ruta.
Debería verificar, en el controlador, si params [: id] == "current_user" (como una cadena) y luego hacer algo de lógica en función de eso ... es decir:
if params[:id] == "current_user"
@user_id = current_user.id
else
@user_id = params[:id]
end
@user = User.find(@user_id)
Un ejemplo muy simplista, pero debe ilustrar el tipo de lógica que necesitará para obtener el actual_user de una ruta personalizada. También podría asignar una ruta nombrada para Current_User a su propia acción del controlador, pero eso no es muy reparador y [probablemente] [probablemente] duplicará la funcionalidad que ya tiene.