0

問題の回避策は既に見つかりましたが、この問題が発生する理由はまだわかりません。内部がどのように機能するかについて、いくつかのことが欠けていると思います。

いくつかのコントローラーから *check_modify_rights* メソッドを呼び出しています。適切な名前の変数が必要です (@object のような一般的なものではなく、post_controller の @post)。

そのため、before_filter を実行した後、Post モデルを持つ @post インスタンス変数が存在することを期待しています。しかし、私は新しい Post モデルを取得し (@post = Post.new のため)、メソッドで object_id をチェックすると、それらは異なります。

# post_controller
  before_filter do |f|
    @post = Post.new
    f.check_modify_rights @post
  end

# application_controller
  def check_modify_rights(obj)
    return redirect_to login_path, :notice => "Please login" unless @user

    p obj.object_id
    obj = obj.class.find(params[:id])
    p obj.object_id

    return if obj.user.id == @user.id or @user.is_admin?

    redirect_to posts_path, :notice => "You don't have permission for this action"
  end
end
4

1 に答える 1