CanCan, InheritedResources и STI - PullRequest
       17

CanCan, InheritedResources и STI

1 голос
/ 14 марта 2011

Как я могу использовать cancan, inherited_resources и наследование одной таблицы вместе? У меня есть код, подобный этому примеру:

class Contact < ActiveRecord::Base; end
class Person < Contact; end
class Company < Contact; end

class Ability
  include CanCan::Ability
  def initialize(user)
    user ||= User.new # in case of guest
    can :read, Contact # User can read People and Companies
    can :create, Person # User can create Person only
    can :manage, :all if user.has_role? :admin
  end
end

class ContactsController <  InheritedResources::Base
  load_and_authorize_resource
  def new
   @contact = contact_sti.new
  end

  private
  def clazz
     self.params[:contact_type].nil? ? "contact" : self.params[:contact_type]
  end
  def contact_sti
    clazz.camelize.constantize
  end
end

Когда я пытаюсь создать пользователя как пользователь, я получаю CanCan :: AccessDenied. Это потому, что InheritedResources использует Contact как: resource_class.

1 Ответ

2 голосов
/ 15 марта 2011

Я нашел это решение:

class ContactsController <  InheritedResources::Base
  alias :resource_class :contact_sti
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...