1

Cancanを使用して、アクセス許可を持つユーザーのみが Rails アプリのオブジェクトを削除できるようにしています。ユーザーの auth_token を使用して削除要求を送信するコンパニオン モバイル アプリケーションがあります。リクエストは次のようになります。

Started DELETE "/projects/888?auth_token=ArpuyxbDyjtyn67r3JgF"
Processing by ProjectsController#destroy as */*
Parameters: {"auth_token"=>"ArpuyxbDyjtyn67r3JgF", "id"=>"888", "project"=>{}}

しかし、ユーザーが無許可であることがわかりました。

これは私がコントローラーに入れたものです:

class ProjectsController < ApplicationController
 def destroy
    @project = Project.find(params[:id])
    if params[:auth_token]
      current_user = User.where(:authentication_token => params[:auth_token]).first
    end

    authorize! :destroy, @project
    @project.destroy
    respond_to do |format|
      format.html{ redirect_to user_path(current_user.username) }
      format.json { head :no_content}
    end    
  end
end

そして、これは私のability.rbファイルです:

class Ability
  include CanCan::Ability

  def initialize(user)

    user ||= User.new

    can :destroy, Project do |project|
        project.user == user || (user && user.admin?)
    end
end

データベースを確認すると、正しい auth_token がユーザーに渡されています。

cancan ユーザーを、渡された auth_token パラメーターを持つユーザーと一致させて、能力のアクセス許可を満たすことができるようにするにはどうすればよいですか?

4

1 に答える 1

0

current_user問題は、現在のユーザーを見つけて返すコントローラーメソッドを持つのではなく、ローカル変数を設定していることだと思います。Cancan は、current_user を見つけるためのコントローラー メソッドを探しています。

于 2015-08-10T17:13:49.217 に答える