Я использую 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, чтобы он мог удовлетворять разрешениям способности?
не должно быть 'user || = User.new'? – Levsero
@ Levsero спасибо, ты прав. к сожалению, это принципиально не решило проблему, о которой я рассказывал. – scientiffic