Rails 3.1 APIのattr_accessibleについて読んだ後、そこにas:admin
オプションがあることがわかりました。2つのことを知りたいです。
ユーザーが管理者フラグを持っている場合、コントローラーはどのようにしてユーザーが管理者であることをモデルに通知しますか。
ユーザーが所有者である場合、
:as => owner
モデルで指定できますか。また、コントローラーがモデルにアイテムの所有者であることをどのように通知しますか。
Rails 3.1 APIのattr_accessibleについて読んだ後、そこにas:admin
オプションがあることがわかりました。2つのことを知りたいです。
ユーザーが管理者フラグを持っている場合、コントローラーはどのようにしてユーザーが管理者であることをモデルに通知しますか。
ユーザーが所有者である場合、:as => owner
モデルで指定できますか。また、コントローラーがモデルにアイテムの所有者であることをどのように通知しますか。
モデルとの組み込みの統合はありません。assign_attributes
呼び出しで役割を渡します。
@project.assign_attributes(params[:project], :as => :admin)
:as
パラメータのデフォルトは:default
で、任意のシンボルを渡すことができます。これをUser
モデルに統合するには、 という属性を与えてから、次のrole
ようにします。
@project.assign_attributes(params[:project], :as => current_user.role.to_sym)
次を使用して保護をバイパスすることもできます:without_protection
。
@project.assign_attributes(params[:project], :without_protection => true)
同様に、new
、create
、create!
、update_attributes
、およびupdate_attributes!
メソッドはすべて一括代入セキュリティを尊重します。セキュリティに関するRuby on Rails ガイドに詳細情報があります。
どちらのシナリオでも、最初に宣言したのと同じ方法で渡します。たとえば、次のようになります。
class User < ActiveRecord::Base
attr_accessible :name
attr_accessible :credit_card, :as => :admin
end
あなたがした場合
user = User.new(:name => "John", :credit_card => "1234123412341234")
次に、を割り当てることができなくなりますcredit_card
:
user.attributes # {:name => "John", :credit_card => nil}
ただし、それが可能であると述べた場合:as => :admin
、それは許可されます
user = User.new({:name => "John", :credit_card => "1234123412341234"}, :as => :admin)
user.attributes # {:name => "John", :credit_card => "1234123412341234"}
詳しくは:
http://www.enlightsolutions.com/articles/whats-new-in-edge-scoped-mass-assignment-in-rails-3-1
特定のユーザーとしてアクセスするすべての属性を適切に定義する必要があります。例えば:
class User < ActiveRecord::Base
attr_accessible :name
attr_accessible :credit_card, :as => :admin
end
これは私にとってエラーを示しました。しかし、私がそれを変更したとき
class User < ActiveRecord::Base
attr_accessible :name
attr_accessible :name, :credit_card, :as => :admin
end
これは私が使用したときにうまくいきました
@user.update_attributes(params[:user], :as => :admin)