Estoy construyendo una pista de auditoría que necesita saber qué usuario está realizando actualmente la solicitud. Mi pista de auditoría está construida usando ActiveSupport :: Notifications para recibir un par que necesita ser auditado.¿Cómo acceder a current_user desde una notificación de Rails?
Lo que me gustaría hacer es usar ActiveSupport :: Concern para encapsular la lógica para mis necesidades de auditoría, de modo que pueda agregar fácilmente la auditoría a cualquier modelo en mi sistema.
En general, esto es fácil de hacer. Yo incluso blogged about it a while back. Sin embargo, me está resultando difícil descifrar cómo hacer que el usuario actual que realiza la solicitud al servidor web me permita registrar quién está haciendo los cambios en mi pista de auditoría.
Sé que hay un montón de preguntas sobre "cómo obtengo current_user en mi modelo", pero no estoy preguntando sobre hacerlo en un modelo, así que espero que haya un mejor conjunto de respuestas. Como mi código de auditoría está relacionado con la infraestructura, espero que haya alguna manera de aprovechar la solicitud actual que se está procesando, o alguna otra cosa que definitivamente me diga quién está actualmente conectado/realizando la solicitud.
He leído muchas "respuestas" que dicen que debo usar el almacenamiento de subprocesos y poner el usuario_actual allí. No me gusta esta respuesta por muchas de las razones que otros no tienen, no hay garantía de que el almacenamiento de subprocesos sea seguro. podría sangrar en varias solicitudes si el servidor usa el mismo hilo para procesar solicitudes múltiples, etc.
así que ... dado que no estoy tratando de acceder a current_user desde mi modelo, sino desde ActiveSupport :: Concern o suscripción al evento ActiveSupport :: Notifications, ¿hay alguna buena opción para mí para saber quién es el usuario actual?
actualización
estoy usando diseñar para la autenticación, que utiliza Warden en la parte final. idear recupera el usuario_actual llamando al request.env['warden'].authenticate(:scope => :user)
(asumiendo que utilizo un modelo de "Usuario" para la autenticación).
¿Hay alguna manera de acceder al objeto actual request
desde mi solicitud o suscripción de notificación? De vuelta en mis días .NET, habría podido llamar al HttpContext.Current.Request
y todo estaría bien. ¿Cuál es el equivalente en Rails?
gracias por el link fix. :) estaba a punto de hacer eso ¡y vi que te habías ocupado de eso! –
¿Encontró una solución para esto? Si lo hizo, por favor escriba al respecto. Gracias. – Shreyas