0

コントローラーを肥大化させることなく、Rails モデルで所有権の検証を行う最善の方法を探しています。これは、current_user を何らかの形でモデルに渡す必要があることを意味します。

現在、すべてのリクエストの開始時に User モデルのクラス属性を current_user に設定しています。

class User < ActiveRecord::Base
  cattr_accessor :current_user
end

class ApplicationController < ActionController::Base
   before_filter :set_current_user
   def set_current_user
     User.current_user = current_user
   end
end

このシナリオで User.current_user の有効期間を完全に理解しているかどうかはわかりません。リクエスト中に値が変更される可能性はありますか?

主に、上記が安全に使用できるかどうか、およびより良いアプローチがあるかどうかを知りたいです。

4

3 に答える 3

1

ベストプラクティスに準拠したい場合、これは間違いなく正しいアプローチです。 current_userはコントローラーメソッドであり、Chain-of-responsibilityパターンに従うことにより、Userモデルは現在のユーザーが誰であるかを認識しないようにする必要があります。

于 2012-02-26T02:30:08.593 に答える
0

これは安全なアプローチではありません:)コントローラー内の状態とモデル内のビジネスロジックを保持します。

current_userをモデルレイヤーに渡す必要がある場合、モデルはこれが誰であるかを気にする必要はありません。コンテンツへのアクセスをフィルタリングするために、いつでも関連付けを使用できます。

current_user.widgets.find(params[:id])

于 2012-02-26T02:43:47.453 に答える