Je tente de sécuriser un contrôleur Rails3 en utilisant declareative_authorization.autorisation déclarative filter_access_to
Le contrôleur dispose des 7 actions RESTful, de trois actions membres personnalisées (activer, désactiver, copier) et d'une action de collecte personnalisée (publique). L'action "public" ne renvoie qu'un seul enregistrement. Seule l'action de collecte personnalisée (publique) doit être accessible aux utilisateurs authentifiés; le reste n'est disponible que pour l'utilisateur actuel.
has_permission_on :foos, :to => :public
has_permission_on :foos, :to => [:full_control, :copy, :activate, :deactivate] do
if_attribute :user => is {user}
end
privilege :full_control, :includes => [:index, :show, :new, :create, :edit, :update, :destroy]
Les 4 actions personnalisées sont définies dans le fichier routes.rb:
resources :users do
resources :foos do
collection do
get :public
end
member do
post :activate, :copy, :deactivate
end
end
end
Un Utilisateur: has_many Foos; Un Foo: appartient à un utilisateur. Le contrôle d'accès 'standard' (filter_resource_access: nested_in =>: user), tel que défini dans le FoosController, semble contrôler l'accès aux 7 actions RESTful, mais ne contrôle pas l'accès aux 4 autres (comme prévu).
Quand je change le FooController à:
filter_access_to :all, :nested_in => :users, :attribute_check => true
Je reçois une erreur qui se lit « Impossible de trouver Foo sans carte d'identité ».
Questions:
- La documentation semble indiquer que: before_filter sera appelé automatiquement charger le modèle Foo lorsque filter_access_to est utilisé. Est-ce que je me trompe? Ai-je besoin d'une configuration supplémentaire de filter_access_to? Dois-je configurer manuellement un: before_filter?
- Dois-je également ajouter use_access_control au modèle pour mes besoins? Je ne suis pas très clair quand il faut ajouter un contrôle d'accès au modèle quand il y a un contrôle d'accès dans le contrôleur.
- La documentation décrit un privilège nommé 'create' - il est défini comme suit: privilege: create,: includes =>: new. De plus, pour la nouvelle action, ce privilège inclut-il automatiquement l'action: create en raison de son nom?
- Si le fichier authentication_rules.rb est modifié, le serveur doit-il être redémarré pour que les nouvelles règles soient appliquées?
Avez-vous trouvé des réponses à ces questions? Je suis confronté à des problèmes similaires. – Shreyas