我正在使用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 参数匹配,使其满足能力权限?