gumatias
9/15/2012 - 7:23 PM

How you can break up large Ability class in CanCan

How you can break up large Ability class in CanCan

def current_ability
  @current_ability ||= Abilities.ability_for(current_user)
end
module Abilities
  def self.ability_for(user)
    if user.admin?
      AdminAbility.new(user)
    else user
      MemberAbility.new(user)
    else
      GuestAbility.new
    end
  end

  class AdminAbility
    include CanCan::Ability

    def initialize(user)
      # ...
    end
  end

  class MemberAbility
    include CanCan::Ability

    def initialize(user)
      # ...
    end
  end

  class GuestAbility
    include CanCan::Ability

    def initialize(user)
      # ...
    end
  end

  # move classes into separate files as needed if they get too long
end