0

J'ai un site Web RPG et je veux que les utilisateurs puissent définir leur nom lors de l'inscription, mais pas lorsqu'ils modifient leur profil. Mais je veux en tant qu'administrateur pouvoir l'éditer.Protéger les attributs à mettre à jour

Puisque j'utilise update_attributes dans l'action de mise à jour, je pense qu'ils peuvent mettre à jour leur first_name sans utiliser le formulaire classique que je fournis.

Y at-il un moyen de le faire avec des validations ActiveRecord ou simplement dans le contrôleur?

Merci d'avance!

Répondre

3

Ajoutez attr_accessible :name, :as => :admin à votre modèle User et dans le contrôleur d'inscription, utilisez @user.update_attributes(params[:user], :as => :admin). L'action update doit utiliser à la place @user.update_attributes(params[:user]) sans l'option :as => :admin.

Plus sur ce sujet: Rails 3.1 Overview

+0

C'est génial! Vous pensez que je peux utiliser un ': as =>: signup' et un': as =>: admin' sur différentes actions? Et l'utilisateur attr_accessible comme: inscription et: admin? – Cydonia7

+0

Ouais devrait être possible! –

0

Cela est plus facile à faire par le contrôleur, car le contrôleur est l'endroit où vous avez accès à l'utilisateur connecté. Donc, dans votre contrôleur:

# When the form is submitted 
unless @current_user.is_an_admin? 
    # List of attributes to allow non-admins to change 
    allowed_fields = %w[allowed_field_1 allowed_field_2] 
    # Remove any non-allowed fields from the params 
    params[:user].delete_if {|key, value| !allowed_fields.include?(key.to_s)} 
end 
@user.update_attributes(params[:user]) 

Vous pourrait le faire à travers le modèle de l'utilisateur, mais vous devez avoir un moyen de transmettre le statut de l'utilisateur d'édition au modèle, puis ajoutez un tas de validations conditionnelles .

+0

En désaccord! Les contrôleurs devraient être propres, et c'est certainement une tâche pour le modèle. –

+0

Eh .... À mon humble avis, en passant cela au modèle brise MVC. L'utilisateur actuel et son statut d'administrateur dépendent essentiellement de la variable de session, et la session fait intrinsèquement partie du contrôleur, pas du modèle. Les méthodes du modèle ne doivent jamais dépendre de l'état d'un autre modèle à moins que ces deux modèles ne soient directement associés. –

Questions connexes