6

適切な権限で設定しようとしているグループリソースがあります。

私が実装しようとしている承認ロジックは次のとおりです。

  1. グループメンバーのみが自分のグループを表示できるようにする必要があります。
  2. 管理者は、任意のグループを表示したり、他のアクションを実行したりできます。

グループコントローラーで次のbefore_filterステートメントを使用してこれを実行しようとしています。

before_filter :signed_in_user
before_filter :correct_user, only: :show
before_filter :admin_user, only: [:show, :index, :edit, :update, :destroy]

Correct_userは、グループメンバーのみがグループを表示できることを確認したので機能します。ただし、私がしたいのは、admin:show句でこれをオーバーライドして、管理者が任意のグループを表示できるようにすることです。現在、それは機能していません。ここで、フィルターの順序とオプションに問題があると思います。

誰かが私がどこで間違っているのか教えてもらえますか?

編集

Amarのリクエストに従ってメソッドコードを追加します。

private

def correct_user
  # User has to be a member to view
  @group = Group.find(params[:id])
  redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil?
end

def admin_user
  redirect_to(root_path) unless current_user.admin?
end
4

1 に答える 1

2

correct_userメソッドを更新するか、次の定義で別のメソッドを作成し、他のフィルターからshowを削除して、新しいメソッドでbefore_filterを追加します。

def correct_user
   @group = Group.find(params[:id])
   redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil?  && !current_user.admin?
end
于 2012-04-21T05:28:12.847 に答える