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