Sha256: 94c8015728d8e3451dee977392720b619c67d0e130d4ecb3c77478d23967aa28

Contents?: true

Size: 1.38 KB

Versions: 1

Compression:

Stored size: 1.38 KB

Contents

class Ability
  include CanCan::Ability

  def initialize(user)
    clear_aliased_actions
    CanPlay::Config.tap do |i|
      user = user||i.user_class_name.constantize.new
      if i.super_roles.is_a?(Array)
        i.super_roles.each do |role_name|
          can(:manage, :all) if user.send(i.role_judge_method, role_name)
        end
      elsif i.super_roles.is_a?(Proc)
        can(:manage, :all) if i.super_roles.call(user)
      end
      i.role_class_name.constantize.all.each do |role|
        next unless user.send(i.role_judge_method, role)
        role.send(i.role_resources_relation_name).each do |role_resource|
          resource = CanPlay.find_by_name_and_code(role_resource.resource_name, CanPlay.override_code)
          next unless resource
          if resource[:type] == 'collection'
            if resource[:behavior]
              block = resource[:behavior]
              can(resource[:verb], resource[:object]) if block.call
            else
              can resource[:verb], resource[:object]
            end
          elsif resource[:type] == 'member'
            if resource[:behavior]
              block = resource[:behavior]
              can resource[:verb], resource[:object] do |object|
                block.call(object)
              end
            else
              can resource[:verb], resource[:object]
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
can_play-0.4.0 lib/can_play/ability.rb