2009/9/30 NachoKB <[email protected]>:
> 2009/9/29 Nicolás Sanguinetti <[email protected]>:
>> La 1 es la 2 con un sheep coat. Es básicamente una variable global,
>> escondida en un método. Es un poco más prolija porque es thread safe,
>> pero no deja de ser una variable global.
>
> No estoy tan de acuerdo con que sean lo mismo. Llevado a un extremo,
> toda clase no deja de ser una constante global entonces.
>
> User.current tiene varias ventajas frente a $current_user: (1) lazy
> loading, (2) está encapsulado en User en lugar de polucionar un
> namespace global, (3) como bien decís, es thread safe.
>
> El punto (2) es más que importante: $current_user está expuesto a
> cualquier modificación por parte de cualquier fucking línea de código
> desde cualquier lado (imaginate si de alguna manera lográs inyectarle
> código a algún eval dando vueltas -- si no me equivoco el acceso a
> Thread puede limitarse desde código no seguro). User.current no es un
> writer, y si existe User.current= es fácil hacer que realice
> chequeos...
>
> El caso sigue siendo, que si bien es buenísimo que se pueda evitar,
> hay veces que es necesario conocer algo así de contexto desde un model
> (en mi caso, tenía un logger que guardaba el id del user actual, y no
> quería pasar por parámetro el usuario cada vez que hacía cualquier
> cosa).

around_filter :logger_with_user

def logger_with_user
  old_logger = Rails.logger
  Rails.logger = LoggerWithUser.new(current_user)
  yield
  Rails.logger = old_logger
end

o algo asi, y LoggerWithUser < Logger, y ta.

No se, esto es off the top of my head, capaz que hay alguna solucion
más prolija. Pero de nuevo, no necesitás acceder a la sesión desde el
modelo.

Ahora me vas a querer justificar que desde el modelo querés acceder a
los cookies, o peor, setear flash messages! y ahí nos agarramos a las
piñas, eh! :P

-foca

> Pero, tá, tu respuesta me pareció horrible...
>
> -- nachokb
> _______________________________________________
> Ruby mailing list
> [email protected]
> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
>
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a