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

这是我的能力.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 回答