Quelle est la meilleure façon d'ajouter en toute sécurité un accès administratif à mon site rails?

StackOverflow https://stackoverflow.com/questions/947169

Question

Je pense que la réponse est un login admin et vérifiez si l'utilisateur a un drapeau d'administration, mais j'ai aussi pensé à d'autres questions connexes.

Est-il préférable d'avoir un drapeau d'administration (attr_protected) dans la même table que l'utilisateur non admins? ou devrais-je avoir une table d'utilisateurs admin?

Dois-je créer une application séparée des rails pour les utilisateurs admin? Cela pourrait être exagéré car ils ont tous deux pour accéder au même datbase (sans parler, il pourrait être une douleur énorme à mettre en place).

Toutes les autres suggestions? En ce moment, j'ai juste besoin d'obtenir une page ou deux si j'ai même regardé en HTTP de base ou l'authentification Digest en tant que mesure temporaire (le contenu protégé est en fait pas si privé / important). Mais ... Je ne sais pas comment mettre en œuvre auth HTTP pour des actions spécifiques, je ne l'ai vu comment la mettre en œuvre pour empêcher l'accès au répertoire.

Toute direction et discussion serait génial. Je suis sûr que d'autres utilisateurs Stack Overflow bénéficieront de cette discussion.

Merci!

Était-ce utile?

La solution

Bates Ryan a une grande série en trois parties de Railscasts sur ce sujet qui devrait vous donner quelques éléments de réflexion:

Il y a aussi trois Railscasts sur différentes techniques d'authentification:

Autres conseils

J'utilise restful_authentication plug-in à cet effet. Et il est très simple de restreindre l'accès à un contrôleur ou toute autre méthode. Sur exemple dans le contrôleur ajouter cette fonction:

private
def authorized?
  user.admin?
end

ou

private
def authorized?
  user.admin? if update? || create?
end

Je définis par l'administrateur? méthode dans mon modèle d'utilisateur. J'ai aussi créé la mise à jour? et de créer? méthodes qui vérifient que l'action a été appelée. Dans restful_authentication autorisé? méthode est toujours exécuté lorsque le contrôleur l'accès.

Je mettrais tout en une seule application et dans une table (ne crée pas les utilisateurs et table d'administration). Vous pouvez sécuriser le drapeau admin dans votre contrôleur en permettant aux utilisateurs de définir cette valeur uniquement pour les utilisateurs d'administration existants.

Je pense que cela dépend du type d'administration.

Si la vue de vos administrateurs auront du site est le même que l'utilisateur normal, mais avec des privilèges supplémentaires, j'aller avec un drapeau d'administration. (Ou, comme vos besoins augmentent, une table de rôles à part entière.) C'est une situation où tout le monde voit la même chose, mais les administrateurs ont accès à diverses actions (supprimer? Modifier? Interdire? Etc.) que les utilisateurs normaux ne le font pas.

Si la vue de vos administrateurs ont besoin est d'une manière extravagante différente de celle du site normal, je recommande une application Rails complètement séparé qui accède à la même base de données. Par exemple, si vos « administrateurs » sont vraiment aider les employés de bureau qui vont répondre aux appels téléphoniques ou de traiter des questions de facturation, ils peuvent avoir des vues complètement différentes de la base de données (et peut-être des façons de modifier les données) qui ne sont pas disponibles dans l'application régulière.

L'inconvénient d'avoir plusieurs sites est qu'il est possible d'avoir des modèles (associations, validations etc.) se désynchroniser. L'inconvénient d'avoir un seul site est que vous pouvez finir par l'insertion de toutes sortes de laid code « si-admin » dans précédemment faciles à comprendre certaines parties de votre site. Quel problème est plus facile à manipuler dépend de vos besoins.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top