2010-08-03 3 views
6

Was wäre der beste Weg, Benutzern die Möglichkeit zu geben, einen privaten Link zu teilen, der es jedem ermöglicht, eine bestimmte Seite/ein Dokument/ein Element anzuklicken Datenschutzbeschränkungen vorhanden?Ruby on Rails private Linkfreigabe: Google Docs Style

In meinem Fall:

Ein Benutzer erstellt Ereignisse, die für bestimmte Gruppen von Beziehungen in der Datenbank beschränkt ist (nämlich: Freunde, Freunde von Freunden, etc.) Ich habe ein : before_filter in Ereignissteuerung Dies überprüft die Berechtigung des aktuell angemeldeten Benutzers, um sicherzustellen, dass dieser Benutzer berechtigt ist, das Ereignis zu sehen. Wenn dies nicht der Fall ist, werden sie mit einer Fehlermeldung auf die Root-Seite gebootet.

Ich möchte jedoch ein spezielles Szenario, in dem ein Benutzer ein Ereignis mit den gleichen Datenschutzeinstellungen erstellen kann und ZUSÄTZLICH in der Lage sein, einen speziellen Link mit seinen Freunden per E-Mail, Facebook usw. zu teilen. Diese Benutzer benötigen kein Konto (müssen aber eines erstellen, um sich für das Ereignis anzumelden). Dies ist wichtig, weil es auch einen: before_filter im application_controller gibt, der sicherstellt, dass ein Benutzer angemeldet ist.

Ich denke, es gibt etwas, was ich hier mit dem Routing tun könnte ... Im Moment habe ich einfach das einfache/Ereignisse/72 Setup. Sollte jedes Ereignis zwei verschiedene Links haben: eine normale und eine "spezielle Code" -Version, die es ihnen ermöglicht, diese zwei zu umgehen: before_filter?

Was denken die Leute?

Antwort

4

Ich hätte einen separaten Controller, der einen Hash-Wert verwendet, um das Ereignis zu referenzieren.

Etwas einfach wie die created_at + user_id Hashed, um eine eindeutige Referenz zu erstellen.

Sie könnten auch einfach die Überprüfung einer bestimmten Aktion überspringen, aber ich würde viel lieber die erste Lösung.

+0

Dank! Ich werde es ausprobieren. – JackCA

6

Ich stimme der Antwort von David Lyod zu (was diese Bedenken in einem anderen Controller trennt).

Aber um den Hash zu erstellen, empfehle ich dringend, den Hash mit einer geheimen Phrase zu salzen.

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

dies tun es nicht möglich ist, ohne das WISSEN der geheimen Phrase, um die Hash-Werte zu berechnen und sie gegen das System zu testen, bis es eine bestehende trifft. Wenn Sie mit sensiblen Daten umgehen, sollten Sie nicht faul sein.

Cheers,

Lukas