2009-08-16 8 views
0

Disons que j'ai une application rails avec un contenu en lecture seule pour le public, mais je voudrais créer des outils pour éditer ce contenu (ou utiliser des échafaudages). Je ne veux pas exposer publiquement des actions de création/mise à jour/suppression (même si elles sont protégées par mot de passe), mais j'aimerais avoir un serveur avec cette fonctionnalité dans un réseau local qui interagit avec la base de données de production. Je pense donc à écrire un plugin pour cela, ce qui ajouterait un environnement d'outils rails (comme le développement, la production et le test) et une façon de configurer une méthode de contrôleur en tant qu '«outils uniquement». Lorsqu'ils ne sont pas en mode Outils, les demandes d'action uniquement sur les outils sont redirigées vers une page 404 standard. Avant de commencer à réinventer une roue, est-ce que quelque chose comme ça existe déjà? Y a-t-il peut-être de meilleures façons de résoudre ce problème?Ajout d'un "mode outils" à l'application rails

Répondre

0

Idée intéressante - En plus de créer l'environnement personnalisé serait-il pas juste un before_filter dans votre contrôleur d'application?

before_filter :can_access_tools, :except => [:show, :index] 

D'autres contrôleurs l'ignoreraient au besoin. Pourquoi le faire en tant qu'environnement distinct?

+0

Je pense que c'est un peu plus complexe (mais peut-être pas beaucoup plus). Je ne veux pas conserver deux entrées séparées dans config/database.yml, mais il semble que je devrais pouvoir faire quelque chose comme

 tools: <<: *production 
Je me demande s'il y a d'autres points de contact à prendre en compte lors de la création environnements personnalisés. C'est un bon point avec la liste blanche, c'est mieux que la liste noire. – etoleb

-1

umm ... je sais herokugarden vous permet de modifier votre code en ligne via un navigateur, cela fonctionnera-t-il?

ici est un lien vers le demo

0

Ce que je ferais (et que j'aurais fait) est de mettre la fonctionnalité d'édition dans un espace de noms séparé (je l'appelle habituellement admin), puis d'utiliser un filtre avant seulement permettre à un utilisateur avec un rôle administrateur d'accéder à ces contrôleurs. Donc, si votre application affiche des widgets, vous pouvez les voir dans l'application normale derrière l'url/widgets. Pour les éditer, vous devriez aller dans/admin/widgets (et aussi être connecté en tant qu'admin). Au lieu de simplement le faire via les espaces de noms de routes, je crée également un AdminController que tous les autres contrôleurs de cet espace de noms étendent. Ensuite, vous pouvez mettre tous les filtres qui doivent s'appliquer à tous en un seul endroit.

Vous pourriez obtenir l'interface utilisateur pour cela assez rapidement en déposant quelque chose comme Active Scaffold pour fournir une interface assez propre pour faire des opérations CRUD sur elle. Vous pouvez également jeter un oeil à Streamlined ou Hobo pour cette partie aussi bien.

J'ai souvent mis en place des environnements supplémentaires pour tester plusieurs contextes, mais dans ce cas, il semble que c'est trop. Si vous limitez la fonctionnalité d'édition par autorisation (nécessitant le rôle d'administrateur) plutôt que par accès (seul le serveur local peut y accéder), cela vous permet également d'effectuer des modifications si vous êtes sur la route et non au bureau.

+0

Je voudrais éviter d'implémenter un système d'authentification d'utilisateur juste pour cacher une boîte à outils d'administration. Cela ressemble à une complication de sécurité inutile. Avec un mode outils, je n'aurais pas nécessairement besoin d'exécuter mes tâches d'administration sur les mêmes machines qui hébergent mon site. Je ne souhaite pas que les processus longs et intensifs du processeur aient un impact sur les performances du site. Merci pour les conseils sur ActiveScaffold/Streamlined/Hobo, je soupçonne qu'ils seront utiles mais je résous ce problème. Bon point sur le "sur la route", mais ce n'est pas quelque chose que je prévois être un facteur majeur (et il pourrait être résolu avec un VPN plus tard). – etoleb

Questions connexes