Verwenden von devise_invitable zum Hinzufügen von Benutzern zu einer Gruppe in Ruby on Rails?

8

Ich habe eine "Gruppen" -Ressource in meiner App, der Benutzer beitreten können (eine Gruppe has_and_belongs_to_many Users und umgekehrt). Das Plug-in devise_invitable ermöglicht es einem vorhandenen Nutzer in meiner App, eine Einladung an einen anderen poennziellen Nutzer zu senden, um sich auf der Website zu registrieren, aber ich möchte etwas Zusätzliche Funktionalität: Ich möchte, dass ein Benutzer jemanden zu einer bestimmten Gruppe einladen kann , so dass er, sobald er die Einladung in der E-Mail akzeptiert, einen Link sehen kann, der dieser Gruppe beitritt.

Hat jemand devise_invitable benutzt, um so etwas zu tun? Was ist der beste Weg, diese zusätzliche Funktionalität hinzuzufügen? Es scheint so, als müsste ich ein "Gruppen-Token" hinzufügen, das die Gruppe in der Einladungs-E-Mail identifiziert, und es dann in der URL zurückgeben, auf die der Nutzer klickt, um die Einladung anzunehmen.

Sollte ich die Methoden des Einladungs-Controllers außer Kraft setzen, oder gibt es ein anderes Plugin, das den Zweck besser erfüllt?

    
Tim 11.11.2010, 21:44
quelle

2 Antworten

7

Ich habe gerade einige sehr ähnliche umgesetzt. Ich habe versucht, devise_invitable zu verwenden, aber es war zu viel Arbeit. Ich suchte also nach anderen Plugins, konnte aber nichts finden und kam zu dem Schluss, dass es einfacher war, eine eigene Implementierung zu schreiben. Das habe ich gemacht:

  • Hinzufügen einer Einladungsressource,

  • Wenn ein Benutzer eine Einladung erstellt, die ich in einem Einladungsfeld speichert (es ist ein serialisierter Hash), müssen alle Informationen, die ich an den Benutzer richten muss, der die Einladung akzeptiert

  • Es wird eine E-Mail an den eingeladenen Benutzer gesendet, die einen Link wie folgt enthält: / users / signup? invitation_token = 1231223123

  • Wenn der Benutzer auf den Link klickt, erstellt er den Benutzer und wendet alle in der Einladung gespeicherten Informationen an, wie Gruppenmitgliedschaft, Name, Rollen ...

  • Wenn der eingeladene Benutzer sich nicht für den Dienst anmelden muss, unterscheidet sich der Link in der E-Mail: Einladungen / 123 / accept? invitation_token = 12312312asdas324

Hoffen Sie diese Hilfe

    
Matteo Melani 16.05.2011 17:51
quelle
6

Ich habe dies getan, indem ich den Invesets-Controller überschrieben habe. Die Anweisungen dafür sind in der Hauptseite von devise_victor auf github, daher werde ich hier nicht darauf eingehen.

Aus Sicherheitsgründen habe ich eine neue Tabelle erstellt, die zusätzliche Einladungsinformationen enthält, sodass der E-Mail-Link nicht den Gruppenlink enthält (meine Gruppen sind nur private Einladungen), sodass ein eingeladener Benutzer die Einladungs-URL nicht ändern soll in der E-Mail und möglicherweise andere Gruppen hinzufügen, die sie nicht eingeladen wurden).

Die neue Tabelle wird von der Benutzer-ID indiziert, nachdem devise_invitable sie in der Benutzertabelle erstellt hat.

%Vor%

Dann können Sie in Ihrer Update-Methode (wieder im selben Controller) () den Invites-Datensatz finden und die erforderlichen Informationen abrufen, mit denen Sie den neuen Benutzer mit der Gruppe verbinden können.

Das einzige Problem, das übrig bleibt, ist, wie man der E-Mail weitere Parameter hinzufügt, wie den Gruppennamen, den ich noch lösen muss.

    
Andrew Lank 04.10.2011 12:11
quelle