私のプロジェクトコントローラーには、以下のアクションがあります。ご覧のとおり、「show」ビューがレンダリングされると「check_if_owner_or_member」が呼び出され、ユーザーがプロジェクトまたは管理者のメンバーであるかどうかがチェックされます。そうでない場合、ユーザーはエラー メッセージを受け取り、ルートにリダイレクトされます。
アクションを試すと、ユーザーが管理者の場合は機能しますが、ユーザーがメンバーの場合は機能しません。したがって、'if !is_owner || に何か問題があるようです。'if !is_member' でのみ試した場合に機能するためです。
私は何を間違っていますか?
before_filter :check_if_owner_or_member, :only => [:show]
def is_owner
Project.where("id = ? AND user_id = ?", params[:id], current_user.id).count > 0
end
def is_member
ProjectsUser.where("project_id = ? AND user_id = ?", params[:id], current_user.id).count > 0
end
def check_if_owner_or_member
if !is_owner || !is_member
redirect_to root_path
flash[:error] = "You don't have permission to the project!"
end
end