2010-04-16 12 views
2

J'ai une question à propos de rubis sur des rails et le processus d'attribution des variables en utilisant la variable params passé par une formeRuby on Rails params injection

class User 
    attr_accessible :available_to_admins, :name 
end 

Disons que j'ai un champ qui est disponible uniquement à mon administrateurs. En supposant que vous n'êtes pas un administrateur, je ne vais pas afficher l'entrée available_to_admins dans votre formulaire.

Après cela, quand je veux sauvegarder vos données, je vais juste faire un:

User.update_attributes(params[:user]) 

Si vous êtes un administrateur, alors pas de problème, les params [: user] va contenir le nom et available_tu_admins et si vous n'êtes pas alors seulement votre nom.

Étant donné que le paramètre available_to_admins est un paramètre attr_accessible, comment empêcher les utilisateurs non-administrateurs d'utiliser une nouvelle variable contenant l'entrée available_to_admins avec leur nouvelle valeur?

Répondre

2

a. Vous pouvez vérifier le rôle de l'utilisateur dans le contrôleur.

class User 
    # remove available_to_admins from attr_accessible 
    attr_accessible :name 
end 

def update 
    @user = User.new(params[:user]) 
    @user.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin' 
end 

b. Vous pouvez ajouter before_save/callbacks before_update à votre modèle

class User 
    # remove available_to_admins from attr_accessible 
    attr_accessible :name 
    before_save :check_role 
    before_update :check_role 
    def check_role 
    self.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin' 
    end 
end 
+0

Merci beaucoup pour votre réponse (s) fl00r! –