Je souhaite implémenter l'autorisation dans mon application Rails au niveau du modèle (et non du contrôleur), de la même manière que la validation sur les modèles. Quelle est la meilleure façon de procéder?Autorisation au niveau du modèle dans Rails
Si elle est implémentée dans les modèles elle-même, le problème principal est que les modèles n'ont pas accès à l'utilisateur actuel. J'ai vu des solutions comme: Thread.current[:user_id] = session[:user_id]
, mais cela ne semble pas être une bonne idée.
J'ai vu une approche différente où des variantes des méthodes comme créer, trouver et nouveau sont créées, en acceptant un paramètre supplémentaire pour l'utilisateur actuel.
Une autre approche serait de mettre en œuvre toutes les méthodes de la classe utilisateur/rôle, donc par exemple user.posts.create
ou user.readable_posts.find
seraient utilisés au lieu de Post.create
ou Post.find
.
Laquelle de ces approches serait suggérée? Existe-t-il de meilleurs moyens de mettre en œuvre l'autorisation? Y a-t-il des plugins qui facilitent cela? J'ai besoin d'une approche qui évolue bien pour plusieurs rôles et modèles.
En utilisant cette approche, comment sont traitées les demandes de la console (ou de toute autre méthode ne passant pas par un contrôleur)? – Ralf
J'ai trouvé la réponse à mon commentaire, Authorization :: Maintenance a des fonctionnalités spécifiques pour cela. À première vue, déclarative_authorization semblait manquer certaines fonctionnalités dont j'avais besoin, mais quand j'ai regardé plus en profondeur, j'ai trouvé que c'était assez puissant. J'aime pouvoir spécifier toutes les permissions dans un fichier séparé. – Ralf
Oui, ça marche plutôt bien avec ça. La majeure partie de la logique est exclue de votre application. Et j'aime la façon dont il vérifie réellement si vous êtes autorisé à faire quelque chose au lieu d'énumérer ce qu'un utilisateur peut faire. Il se sent plus propre. –