Je suis assez nouveau à Ruby On Rails et maintenant je fais une application simple. Dans cette application, un utilisateur peut créer de nombreux éléments et j'utilise concevoir pour l'authentification. Ofcourse Je veux vous assurer que vous êtes le propriétaire afin de supprimer des éléments (équipes, joueurs, etc.) et la façon dont je le fais maintenant:La meilleure façon de limiter les actions (modifier/supprimer) avec Ruby on Rails and Devise
def destroy
@team = Team.find(params[:id])
if current_user.id == @team.user_id
@team.destroy
redirect_to(teams_url, :notice => 'The team was deleted.')
else
redirect_to root_path
end
end
Est-ce la meilleure façon? Je pensais à mettre une méthode dans le modèle mais je ne suis pas sûr de pouvoir accéder à current_user à partir de là. Je pensais aussi à un before_filer, quelque chose comme:
before_filter :check_ownership, :only => [:destroy, :update]
Je cette affaire et si je veux coder une seule méthode pour tous les objets (tous les objets Concerne un « user_id » -field)
Oui, je fais ça. Les utilisateurs qui ne sont pas connectés peuvent utiliser Index/Show. Pour créer, vous devez être connecté. Mais la question était de savoir si un objet sur le point d'être détruit ou modifié appartient vraiment à l'utilisateur ou si l'action est effectuée par un administrateur. –
Pour être sûr que l'utilisateur ne peut modifier que les éléments qu'il possède, je le fais: @team = current_user.teams.find (params [: id]) Généralement, je fais un jeu de contrôleurs séparé pour les fonctions d'administration. – drummondj
Je dois essayer ça. Cela semble être une bonne solution. –