PDA

Visualizza la versione completa : [Rails] problema con before_filter


mlipreri
23-07-2009, 11:07
Ciao nel mio controller ho aggiunto il seguento filtro


class AssetsController < ApplicationController
layout 'layout'
before_filter :is_user_admin

....

private
def is_user_admin
if current_user.id == 1
return true
else
return false
end
end

end

che non sembra sortire nessun effetto dato che riesco sempre a visulizzare le azioni renderizzate dal controller anche se l'id è diverso da 1, di questo ne sono certo perchè lo vedo stampato a monitor.
Qualcuno sa dirmi dove sbaglio?

Ho rimosso
private
def is_user_admin

return false

end
[/CODE]
ed ottengo sempre lo stesso risultato, la pagina viene visualizzata.
Grazie

Sgurbat
23-07-2009, 19:55
Non vorrei dire una fesseria ma forse ritornare FALSE non è sufficiente.

FALSE blocca l'eventuale esecuzione di altri filtri interrompendo la catena ma sei tu poi che devi dire cosa fare, nel qual caso probabilmente un redirect alla pagina di login.

mlipreri
24-07-2009, 08:57
si grazie, ho messo un redirect ed ora fa quello che deve fare :) era il primo filtro che mettevo e ho interpretato male il suo uso. Grazie della dritta

Sgurbat
24-07-2009, 14:40
Prego, in effetti anch'io ero rimasto dubbioso proprio perchè non ho ancora grande confidenza con Rails.

Se ci pensi bene però dire semplicemente di non visualizzare la pagina non ha senso, come dovrebbe comportarsi il Controller in quel caso?

I filtri, sia per il Model che per il Controller, alla fine credo vadano visti come delle semplici utility per eseguire delle azioni secondarie prima o dopo un'azione principale.

Sta tuttavia allo sviluppatore decidere compiutamente quali azioni svolgere.

mlipreri
24-07-2009, 14:55
nel mio caso solo alcuni utenti posso accedere al controller assets, quale sarebbe il modo più elegante per farlo?
Per adesso ho messo semplicemente un redirect nel filtro...in questo modo quando chiamo /assets non chiamo l azione show ma ridirigo l'utente ad un altro controller.

Sgurbat
25-07-2009, 11:51
Beh, penso tu debba semplicemente differenziare le autorizzazioni dei vari utenti distinguendoli tra: Admin, Guest ecc.

Prova a dare uno sguardo alle gemme ed ai plug-in in rete, di sicuro c'è qualcosa a riguardo. ;)

Loading