2009-07-28 4 views
2

Ich habe ein Benutzermodell, das Informationen wie Benutzername, E-Mail, Heimatstadt usw. enthält. Wenn der Benutzer angemeldet ist, kann er alle seine Informationen über die Show-Seite (/ users/723, zum Beispiel) bearbeiten.Wie zeigt man die öffentliche Version des Benutzerprofils in Rails an?

Ich möchte eine "öffentliche" Version dieser Seite haben, die von jemandem, der nicht eingeloggt ist, oder von jemandem, der als jemand anders eingeloggt ist, angesehen werden kann. Es hätte unterschiedliche Informationen über den Benutzer und keine der Links zum Bearbeiten von Informationen.

Was ist der sauberste Weg, um die drei verschiedenen Versionen dieser Seite korrekt anzuzeigen?

Nachtrag.

Ich verwende derzeit authlogic für die Authentifizierung und acl9 für die Zugangskontrolle. Ich sehe dies jedoch nicht als eine Frage der Authentifizierung und Autorisierung. Ich denke, es ist eine Frage des Controller/View-Designs. Ob der Benutzer angemeldet ist oder die Informationen besitzt, ist nebensächlich. Wenn Sie Widgets auf drei verschiedene Arten basierend auf dem Sitzungsstatus anzeigen möchten, würde ich denken, dass Sie die Antwort auf diese Frage verwenden könnten.

Antwort

4

Es gibt Unmengen von Möglichkeiten, dies zu tun, und ich glaube nicht, dass es einen saubersten Weg gibt.

Ich würde wahrscheinlich die Seite in Teiltöne, eine partielle für jede Gruppierung von Informationen, die Sie brauchen.

Dann könnten Sie Variablen steuern, welche Teiltöne gerendert werden.

Zum Beispiel (in HAML):

- if @admin 
    render :partial => 'admin_panel' 

Für die echten einfachen Sachen, die man das, wenn

Alternativ aus der Hand, man ist, wenn Sachen (und nicht einen teilweise hat) Inline könnte kann für jede "show" -Seite unterschiedliche Ansichten haben.

+0

Ich stimme Sam hier zu, mit der leichten Einschränkung, dass es je nach den Unterschieden sinnvoller sein kann, die Änderungen nur inline vorzunehmen. Auf einer Site, auf der ich nur die Schnellbearbeitungsfunktion für Administratoren aktivieren möchte, handelt es sich um eine einfache Bedingung in der Ansicht. Ich möchte jedoch nicht zu Teilzeigern wechseln, wenn die Unterschiede so gering sind. – scottru

0

Für Benutzerprofile (sowie Benutzerauthentifizierung) empfehle ich dringend, Authlogic zu betrachten. Es macht alles extrem einfach und ist sehr gut gestaltet. Sie fügen grundsätzlich einen vor-Filter, der sagt:

before_filter :require_login, :only => [:edit, :update] 

Dann müssen Sie angemeldet sein um zu bearbeiten zu gehen (und damit zu aktualisieren Post an), sonst ist es öffentlich sichtbar ist. Sie können eine Beispielanwendung von here herunterladen.

Es unterstützt auch die Integration mit OpenID, LDAP, Facebook Connect und OAuth (Twitter) über einige Addons, die auf der GitHub-Seite für das Projekt (oben verlinkt) diskutiert werden.

Ich hoffe meine Antwort war hilfreich.

+0

@Mike, ich denke, die OP hat bereits eine Möglichkeit, Authentifizierung und Autorisierung zu tun, er sucht nur nach einer Möglichkeit, seine Sicht sauber zu brechen. –

+0

@Sam, ich verstehe, aber Authlogic ist buchstäblich eine "Drop-in-and-Go" -Lösung, die die Funktionalität enthält, nach der er ohne Probleme sucht. Es war nur ein Vorschlag, den er vielleicht nicht gefunden hatte, und ich hielt es für eine Erwähnung. –

1

Ich denke, Sie sollten einen zweiten Controller (z. B. Memberprofiles Controller) erstellen. Sie können also den Benutzer-Bearbeitungsbereich vom öffentlichen Zugriffsbereich trennen.

Verwandte Themen