2010-08-03 13 views
6

¿Cuál sería la mejor manera de dar a los usuarios la capacidad de compartir un enlace privado que permite a cualquiera que haga clic para ver una determinada página/documento/elemento que tienen restricciones de privacidad en su lugar?Ruby on Rails intercambio de enlaces privados: Google Docs Style

En mi caso:

un usuario crea eventos que están limitados a ciertos grupos de relaciones en la base de datos (es decir, amigos, amigos de amigos, etc.) que tienen una : before_filter en el controlador de eventos que verifica la elegibilidad del usuario registrado actual para asegurarse de que ese usuario tenga permiso para ver el evento. Si no lo hacen, se inician en la página raíz con un mensaje de error.

Sin embargo, quiero que exista un escenario especial en el que un usuario pueda crear un evento con esas mismas configuraciones de privacidad y ADEMÁS, pueda compartir un vínculo especial con sus amigos por correo electrónico, Facebook, etc. Esos usuarios NO necesitan una cuenta (pero tendrán que hacer una para inscribirse en el evento). Esto es importante porque también hay un: before_filter en el application_controller que asegura que un usuario está conectado.

Estoy pensando que hay algo que podría hacer con el enrutamiento aquí ... Ahora mismo solo tengo el simple/eventos/72 configuración. ¿Debería cada evento tener dos enlaces diferentes: uno normal y una versión de "código especial" que les permita eludir esos dos: before_filter?

¿Cuáles son las opiniones de las personas?

Respuesta

4

Tendría un controlador por separado que utiliza un valor hash para hacer referencia al evento.

Algo simple como create_at + user_id hashed para crear una referencia única.

También puede omitir el control de una determinada acción, pero preferiría la primera solución.

+0

Gracias! Voy a probarlo. – JackCA

6

Estoy de acuerdo con la respuesta de David Lyod (separando esta preocupación en otro controlador).

Pero para crear el hash, le recomiendo que sala el hash con una frase secreta.

require "digest" 
Digest::SHA512.hexdigest("#{created_at}#{user_id}.mysupersonicsecretSALT") 

Hacer esto no es posible, sin la Knowlegde de la frase secreta, para calcular los valores hash y prueba de ellos en contra de su sistema hasta que llega a una ya existente. Si maneja datos confidenciales, no debe ser flojo.

Saludos,

Lukas