質問

は、私のオンラインストアでは、ユーザーは他の人に自分の注文(例えば、その請求先住所)の特定のプロパティを変更することはできますが、されていない(例えば、発信IPアドレス)。管理者は、他の一方で、すべてののためのプロパティをを変更することが許可されています。

を考えると、これは、どのように私はきちんと私の注文モデルを確保するために:attr_accessibleを使用することができますか?または私はすべての管理者が変更して、普通のユーザーがアクセスすることができ、これらのコントローラのアクションでOrder.update_attributes(params[:order])の使用を控えることを属性?

アクセスマークするためにそれを使用する必要があります
役に立ちましたか?

解決

一般的に言って、attr_accessibleは、あなたが探しているとRailsは、その中に組み込まれて何も付属していないツールが何をしたいんではありません。

あなたがモデル内の特定の属性を更新できる人を細かく制御したい場合は、あなたのような何かを行うことができます:

class Order < ActiveRecord::Base
  def update_attributes_as_user(values, user)
    values.each do |attribute, value|
      # Update the attribute if the user is allowed to
      @order.send("#{attribute}=", value) if user.can_modify?(attribute)
    end
    save
  end
end

次に、あなたがOrder.update_attributes(params[:order])すると、あなたが正しい場合にtrueを返すようにOrder.update_attributes_as_user(params[:order], current_user)メソッドを実装すると仮定すると、それが動作するはずですあなたのUser#can_modify?を変更することができます。

他のヒント

私は同じ問題を抱えていたし、今私は http://github.com/dmitry/この宝石を使用していますattr_accessible_blockする

これは簡単で、いくつかの生産のウェブサイトで使用されます。

はい、あなたは権限がアクション内で確認されているので、アクションを変更する必要があります。 Order#update_attributesを呼び出すと、一般的なユーザーのために動作しません。

私は、あなたが探している何かをできるようになる役割ベースの認証プラグインをremberすることはできません。これらのプラグインは、コントローラではなくモデルにミックスインからです。彼らはまた、ActiveRecord::Baseなどを確認するためにattr_accesibleにミックスインする必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top