2012-03-13 10 views
12

A Userhas_oneAccountユーザモデルにattr_accessibleを設定すると、:account,:account_id、またはその両方を保護する方が良いでしょうか?Rails attr_accessible:オブジェクトvs:object_id

attr_accessible :account 

または

attr_accessible :account_id 

または

attr_accessible :account, :account_id 

私は両方のように感じる(それはより安全だと)それはあまりDRY感じていても移動するための方法です。ちょうど私が求めている理由について、もう少し背景を与えるために、より背景に

を与えるために

を更新。私は、ほとんどのpplのように、Githubに何が起こったのかを見たので、私たちはアプリを通り抜け、少し強くロックしています。

私たちは、アカウントに

User.create account: account

、我々はACCOUNT_IDに渡された合格したテスト見つかっこれを実行する過程で

User.create account_id: account.id

を私のオプションは、いずれかの変更をしたがそれらすべてが一貫しているか、どちらかを許可するためにattr_accessibleを変更してください。私はすべてを一貫して変えることに決めました。しかし、これはおそらく私たちがアプリ全体を通して両方の方法を使用していたことを心配してしまいました。

私がmisspeakを実行したとき、両方を使用するとより安全です。長い一日だった。

+0

あなたは 'accepts_nested_attributes_for'も使用していますか? – tadman

+0

私の質問に対する答えがあなたの答えに依存する場合、私は両方の場合に理由と答えを見たいと思う。 – pcg79

+0

あなたが 'accepts_nested_attributes_for:account'を使っているならば、あなたの作成や更新を行うときに、自動的に適用され、' params [:user] [:account_attributes] 'が自動的に適用しようとします。この場合、 'attar_accessible:account_attributes'を追加する必要があります。 – rwc9u

答えて

7

このユーザーの更新方法にもよりますが、正解はありません。あなたはすでにあなたが他の属性の多くと一緒にユーザーに関連付けるアカウントオブジェクトを持っている場合

user.update_attributes(:account => account) 

参考:attr_accessible :accountはあなたに直接、次のようにアカウントを大量に割り当てることができます。この後者のケースは、一般的に、より危険とみなされ、との問題の一部だったさ

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

:アカウントのIDを割り当てた場合は、ドロップダウンまたはいくつかの他のフォーム要素からの一方、attr_accessible :account_idは、より適切であろうGithubの最近のセキュリティ上の問題:あなたに属していないアカウントを含め、あなたが好きなaccount_idを投稿でき、あなたのユーザーはそのアカウントに割り当てられます。

私は全体的に私は前者に行き、あなたが期待しているアカウントを確実にするためにルックアップを行いますが、私が最初に言ったように、あなたはどのようにこれを使って。

0

アカウントbelongs_to :userと仮定して、account.rbにattr_accessible :userまたはattr_accessible :user_idを設定しないでください。

また、attr_accessibleは明示的なホワイトリストです。attr_accessible :user, :user_idattr_accessible :userよりどのように安全であるかわかりません。

+0

何がどのモデルに入っているのかはまったく関係ありません。それは、どちらがより良いのかに関する一般的な質問の多くです。そして、はい、おそらく私は両方の使用をより安全だと言ったときにミスを犯しました。私は私の元の質問にいくつかの詳細を追加します。 – pcg79

関連する問題