2012-03-13 17 views
12

A Userhas_oneAccount. Quando si imposta attr_accessible sul modello Utente è meglio proteggere :account, :account_id o entrambi?Rotaie attr_accessible: oggetto vs: object_id

attr_accessible :account 

o

attr_accessible :account_id 

o

attr_accessible :account, :account_id 

mi sento come entrambi è la strada da percorrere (come è più sicuro), anche se si sente meno secca.

Update per dare più di fondo

solo per dare un po 'più di fondo su questo che sto chiedendo. Io, come la maggior parte dei ppl, ho visto cosa è successo a Github, quindi stiamo esaminando la nostra app e chiudendola un po 'più forte.

Nel processo di fare questo ho trovato prove in cui si passano in conto

User.create account: account

e dove siamo passati in account_id:

User.create account_id: account.id

mie opzioni erano a uno cambiamento essere tutti consistenti o modificare attr_accessible per consentire entrambi. Ho deciso di cambiarli tutti per essere coerenti. Ma questo mi ha fatto preoccupare che forse stavamo usando entrambi i metodi in tutta la nostra app e potrei interrompere la nostra app consentendo solo l'uno o l'altro.

Ho parlato male quando ho detto che usare entrambi è più sicuro. E 'stata una lunga giornata.

+0

Stai anche utilizzando 'accept_nested_attributes_for'? – tadman

+0

Se la risposta alla mia domanda dipende dalla risposta alla tua, mi piacerebbe vedere il motivo e una risposta in entrambi i casi. – pcg79

+0

Se si sta usando 'accept_nested_attributes_for: account', i binari cercheranno automaticamente di applicare e' params [: user] [: account_attributes] 'quando crea o aggiorna. In questo caso dovresti anche aggiungere 'attar_accessible: account_attributes' – rwc9u

risposta

7

Non c'è una risposta giusta per questo, sebbene dipenda da come si intende aggiornare questo utente. attr_accessible :account vi permetterà di massa assegnare l'account direttamente in questo modo:

user.update_attributes(:account => account) 

utile se si dispone già di un oggetto account che si desidera associare all'utente insieme a un sacco di altri attributi. D'altra parte, attr_accessible :account_id sarebbe più appropriato se si stesse assegnando l'ID del conto, come da un menu a discesa o di qualche altro elemento form:

user.update_attributes(params[:user]) # params[:user][:account_id] is a part of this hash 

Quest'ultimo caso è generalmente considerato più pericoloso ed è stato parte del problema con la Il recente problema di sicurezza di Github: puoi pubblicare qualsiasi account che ti piace, incluso un account che non ti appartiene, e il tuo utente verrà assegnato ad esso.

Quindi nel complesso vorrei fare il primo e fare una ricerca per assicurarmi che l'account sia quello che ti aspetti, ma come ho detto all'inizio, puoi andare su entrambi in questo modo a seconda di come intendi usalo

0

Non preferiresti impostare attr_accessible :user o attr_accessible :user_id nel tuo account.rb, supponendo che un account belongs_to :user.

Inoltre, attr_accessible è una lista bianca esplicita.Non vedo come attr_accessible :user, :user_id sarebbe più sicuro di attr_accessible :user.

+0

Onestamente le specifiche se ciò che accade in quale modello, è irrilevante. È più una questione generale su quale sia meglio. E sì, probabilmente ho scelto il misspoke quando ho detto che usare entrambi è più sicuro. Aggiungerò qualche altro dettaglio nella mia domanda originale. – pcg79

Problemi correlati