Sha256: 8248b52fd39de97d60f986d8d805f378975a7be8d76a07dc93d485341d93937e

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

class Ability
  include CanCan::Ability
  attr_accessor :user

  def initialize(user)
    CanPlay::Config.tap do |i|
      self.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(user)
            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(user, 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.3.1 lib/can_play/ability.rb