1

管理者、マネージャー、エンジニアの 3 つのユーザー グループが必要です。管理者は、すべてのオブジェクトを表示したり、ユーザーが属するグループを変更したりできます。マネージャは、自分のものとエンジニアのものを見ることができます。エンジニアは自分のものしか見ることができません。問題は、すべてのロジックをどこに配置するかです。つまり、ビュー、コントローラー、またはモデルです。セッション ヘルパー「current_user_right_on(stuff)」を作成し、ビューで権限を確認します。

if current_user_right_on(stuff) == view 
  show_stuff
  if current_user_right_on(stuff) == change 
    show_edit_controls
  end
end

そのようなことを行う一般的な方法は何ですか?経験則とは何ですか?

更新だから、今私はコントローラーにあります

def index
  if logged_in?
    if current_user.admin?
      @stuff = Stuff.all
    else
      @stuff = Stuff.stuff_user_can_see(current_user)
    end
  else
    @stuff = Stuff.where( <anyone can see> )
  end
end

モデルには、データベースから適切なレコードを選択するメソッド「stuff_user_can_see(user)」があります。

ここで何を改善すればよいですか?

4

2 に答える 2

2

現在、承認ロジックをコントローラー レベルに維持することがベスト プラクティスと見なされています。このようにすると、渡されたインスタンス変数 (例: @stuff) は、ユーザーが許可されているデータのみを表示するように既にフィルター処理されているため、ユーザーの役割に関係なく、ビューは同じままです。これにより、コントローラーの承認ロジックを再利用できるため、必要に応じて後で API を簡単に追加できます。

サードパーティの承認ジェムを統合する前に、まず独自の承認をロールする方法を学ぶことをお勧めします。そうしないと、gem が何をしているのかわからないため、gem がどのように機能するのか混乱することになります。Michael Hartl のRails Tutorial bookの認証セクションをチェックアウトします。あなたが知りたいことはすべてそこにあり、私がここで説明できるよりもうまく説明しています.

于 2015-01-03T20:44:42.760 に答える