2008-08-28 6 views
2

J'utilise Ruby on Rails pour un site interne. Différents utilisateurs du site ont accès à une grande variété de données et à des perspectives très disparates des données. Au sein de ces différentes catégories d'utilisateurs, il doit y avoir des niveaux d'accès. Dans les niveaux d'accès, je dois être en mesure d'ajouter des fonctionnalités d'autres classes d'utilisateurs.Comment programmer les préférences utilisateur

Dans la version 1.0 publiée du site intranet, j'ai implémenté les classes générales d'utilisateurs. Je suis maintenant nécessaire pour implémenter beaucoup de contrôle plus fin d'un accès d'utilisateurs.

La question est de savoir comment? Quelle est la pratique généralement acceptée pour coder les préférences de l'utilisateur (afficher la carte (ou non), accéder à cette fonction, mais pas cette fonctionnalité) sans faire exploser le schéma de base de données et remplir le code de vue avec <% si feature_allowed% > tags partout.

Répondre

3

Une autre approche totalement différente serait d'utiliser des plugins acts_as_authenticated et d'autorisation. Les tables seront construites par les plug-ins (c.-à-utilisateurs, rôles et rôles _users). A partir de la doc:

Le plugin d'autorisation prévoit ce qui suit:

  • Une façon simple de l'autorisation de vérifier à chaque niveau méthode de classe ou une instance utilisant #permit et #permit?

  • Autorisation utilisant des rôles pour l'ensemble de l'application, une classe de modèle ou une instance d'un modèle (c'est-à-dire, un objet particulier).

  • Quelques méthodes dynamiques de type anglais qui s'appuient sur les rôles définis. Vous pourrez utiliser des méthodes comme "user.is_fan_of angelina" ou "angelina.has_fans?", où un 'fan' est seulement défini dans la table des rôles.

  • Choisissez et choisissez un mixage correspondant au niveau de complexité de votre base de données. Pour toutes les fonctionnalités, vous voulez utiliser "objet rôles table" (voir ci-dessous)

2

peuplant le code de vue avec <% si feature_allowed%> tags partout.

Je ne pense pas que vous vouliez faire cela. En supposant qu'aucune des alternatives suggérées n'est praticable, vous devriez au moins envisager de transférer ces vérifications dans vos contrôleurs, où vous pourrez les refactoriser en un before_filter. Voir la section 11.3 dans «Développement Web Agile avec Rails» (page 158 dans ma copie de la 2e édition) où ils font exactement cela.

Questions connexes