CanCan не авторизует вложенный ресурс - PullRequest
4 голосов
/ 22 декабря 2011

У меня есть модель Ticket и модель TicketReply:

class Ticket < ActiveRecord::Base
  has_many :replies, :class_name => "TicketReply"
end

class TicketReply < ActiveRecord::Base
  belongs_to :ticket, :class_name => "Ticket"
end

Вот мой список способностей:

class Ability
  include CanCan::Ability

  def initialize(user)    
    can :manage, Ticket,      :userid => user.id
    can :manage, TicketReply, :ticket => { :userid => user.id }
  end
end

И, наконец, мой TicketRepliesController:

class TicketRepliesController < AuthorizedController
  load_and_authorize_resource :ticket
  load_and_authorize_resource :ticket_reply, :through => :ticket

  def create
    if @ticket_reply.valid?
      # ...
    else
     # ...
    end
  end
end

Однако каждый раз, когда я пытаюсь создать ответ на тикет, я получаю несанкционированное сообщение: «Вы не авторизованы для доступа к этой странице».

РЕДАКТИРОВАТЬ : я могу получить доступ к самому штрафу Ticket через TicketsController.

Есть идеи, что мне не хватает?

1 Ответ

0 голосов
/ 22 декабря 2011

В контроллере new и создания действий вам нужно связать новую запись билета с current_user

class TicketRepliesController < AuthorizedController
  ... whatever code you have

  protected

  # override to do the wireing
  def build_resource
    resource = super
    resource.userid = current_user.id # wired!
    resource
  end
end

Теперь CanCan увидит ссылку и разрешит!

...