Cancan能力找不到用户

时间:2015-08-10 16:06:35

标签: ruby-on-rails authentication devise cancan auth-token

我正在使用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参数进行匹配,以便它能够满足权限?

1 个答案:

答案 0 :(得分:0)

我认为问题在于您正在设置<div class="modal fade" id="compose-modal" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> <h4 class="modal-title"><i class="fa fa-envelope-o"></i> Compose New Message</h4> </div> <!-- <form action="#" method="post"> --> <div class="modal-body"> <div class="form-group"> <div class="input-group"> Bla Bla Bla </div> </div> </div> <div class="modal-footer clearfix"> <button type="button" class="btn btn-danger" data-dismiss="modal"><i class="fa fa-times"></i> Close</button> <button type="submit" class="btn btn-primary pull-left"><i class="fa fa-envelope"></i> Send Message</button> </div> <!-- </form> --> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div> 的局部变量,而不是使用找到并返回当前用户的控制器方法。 Cancan正在寻找一种控制器方法来查找current_user。