Sha256: d20fd4d36af7271e3d8264a1fc94df1a4731313cfe7dd4bc6e85ae5b637426d2

Contents?: true

Size: 1.45 KB

Versions: 1

Compression:

Stored size: 1.45 KB

Contents

# @stanislaw: needed?
require 'cantango/permit_engine/util'

module CanTango
  class Ability
    autoload_modules :ClassMethods, :Scope, :Cache
    autoload_modules :MasqueradeHelpers, :PermitHelpers, :PermissionHelpers
    autoload_modules :UserHelpers, :RoleHelpers

    include CanCan::Ability
    include Cache
    extend  ClassMethods

    attr_reader :options, :subject, :session

    # Equivalent to a CanCan Ability#initialize call
    # which executes all the permission logic
    def initialize candidate, options = {}
      raise "Candidate must be something!" if !candidate
      @candidate, @options = candidate, options
      @session = options[:session] || {} # seperate session cache for each type of user?

      return if cached_rules?

      # run permission evaluators
      with(:permissions)  {|permission| permission.evaluate! user }
      with(:permits)      {|permit| break if permit.execute == :break }

      cache_rules!
    end

    include CanTango::PermitEngine::Util

    def with engine_type, &block
      send(engine_type).each do |obj|
        yield obj
      end if send(:"#{engine_type}?")
    end

    def subject
      return @candidate.active_user if masquerade_user?
      return @candidate.active_account if masquerade_account?
      @candidate
    end

    def config
      CanTango.config
    end

    include MasqueradeHelpers
    include PermissionHelpers
    include PermitHelpers
    include UserHelpers
    include RoleHelpers
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
cantango-0.8.0 lib/cantango/ability.rb