2009-07-28 8 views
2

J'ai un modèle Utilisateur qui contient des informations telles que nom d'utilisateur, email, ville natale, etc. Lorsque l'utilisateur est connecté, il peut modifier n'importe laquelle de ses informations via la page d'affichage (/ users/723, par exemple). Je voudrais avoir une version "publique" de cette page qui peut être vue par quelqu'un qui n'est pas connecté ou par quelqu'un qui est connecté comme quelqu'un d'autre. Il aurait différents niveaux d'information sur l'utilisateur et ne disposerait d'aucun des liens pour éditer l'information.Comment afficher la version publique du profil utilisateur dans Rails?

Quelle est la manière la plus propre d'afficher correctement les trois versions différentes de cette page?

Addendum. J'utilise actuellement authlogic pour l'authentification et acl9 pour le contrôle d'accès. Cependant, je ne vois pas cela comme une question d'authentification et d'autorisation. Je pense que c'est une question de conception de contrôleur/vue. Si l'utilisateur est connecté ou possède les informations est accessoire. Si vous vouliez afficher les Widgets de trois façons différentes en fonction de l'état de la session, je pense que vous seriez capable d'utiliser la réponse à cette question.

Répondre

4

Il y a des tas de façons de le faire, et je ne pense pas qu'il y ait un moyen plus propre.

Je diviserais probablement la page en partiels, un partiel pour chaque groupe d'information dont vous avez besoin.

Ensuite, vous pouvez avoir des variables qui contrôlent les partiels rendus.

Par exemple (en HAML):

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

Pour la vraie substance simple, vous pouvez inline le cas (et non une partie)

Par ailleurs, si des choses se fait à la main, vous peut avoir différentes vues pour chaque page "show".

+0

Je suis d'accord avec Sam sur celui-ci, avec la légère mise en garde que, selon les différences, il peut être plus logique de faire les changements en ligne. Par exemple, sur un site où je veux juste activer la fonctionnalité d'édition rapide pour les admins, c'est une condition simple à l'intérieur de la vue, mais je ne veux pas pagayer aux partiels quand les différences seront si mineures. – scottru

0

Pour les profils utilisateur (ainsi que l'authentification de l'utilisateur), je recommande fortement de regarder Authlogic. Cela rend tout extrêmement simple et est très bien conçu. Vous ajoutez essentiellement un filtre avant qui dit:

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

Ensuite, vous devez être connecté pour aller à éditer (et poster ainsi de mettre à jour), sinon il est visible publiquement.

Vous pouvez télécharger un exemple d'application de here.

Il prend également en charge l'intégration avec OpenID, LDAP, Facebook Connect et OAuth (Twitter) via certains addons, qui sont discutés sur la page github du projet (ci-dessus).

J'espère que ma réponse a été utile.

+0

@Mike, je pense que l'OP a déjà un moyen de faire l'authentification et l'autorisation, il cherche juste un moyen de briser proprement son point de vue. –

+0

@Sam, je comprends, mais Authlogic est littéralement une solution «drop-in-go» qui contient la fonctionnalité qu'il recherche sans aucun tracas. C'était juste une suggestion qu'il n'avait peut-être pas trouvée, et je pensais qu'elle méritait une mention. –

1

Je pense que vous devriez créer un second contrôleur (par exemple contrôleur de profil de membre). Vous pouvez ainsi séparer la zone d'édition utilisateur de la zone d'accès public.

Questions connexes