Sha256: 01d0f91692e82e2ea23be96df030bef05b3d1f8dd8d90b867c3b9b3cf43632ac

Contents?: true

Size: 1.39 KB

Versions: 17

Compression:

Stored size: 1.39 KB

Contents

module Shamu
  module Security

    # Defines how an {ActiveRecord::Relation} is refined for an
    # {ActiveRecordPolicy}.
    class PolicyRefinement

      def initialize( actions, model_class, block )
        @actions     = actions
        @model_class = model_class
        @block       = block
      end

      # Determines if the refinement matches the request action permission on
      # the given relation.
      #
      # @param [Symbol] action to be performed on entities projected from the
      #     `relation`.
      # @param [ActiveRecord::Relation] relation to refine.
      # @param [Object] additional context offered to {Policy#permit?}.
      #
      # @return [Boolean] true if the rule is a match.
      def match?( action, relation, additional_context )
        return false unless actions.include? action
        return false unless model_class_match?( relation )

        true
      end

      # Apply the refinement to the relation.
      #
      # @param [ActiveRecord::Relation] relation to refine
      # @return [ActiveRecord::Relation]
      def apply( relation, additional_context )
        ( block && block.call( relation, additional_context ) ) || relation
      end

      private

        attr_reader :actions
        attr_reader :model_class
        attr_reader :block

        def model_class_match?( candidate )
          model_class <= candidate.klass
        end

    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
shamu-0.0.24 lib/shamu/security/policy_refinement.rb
shamu-0.0.21 lib/shamu/security/policy_refinement.rb
shamu-0.0.20 lib/shamu/security/policy_refinement.rb
shamu-0.0.19 lib/shamu/security/policy_refinement.rb
shamu-0.0.18 lib/shamu/security/policy_refinement.rb
shamu-0.0.17 lib/shamu/security/policy_refinement.rb
shamu-0.0.15 lib/shamu/security/policy_refinement.rb
shamu-0.0.14 lib/shamu/security/policy_refinement.rb
shamu-0.0.13 lib/shamu/security/policy_refinement.rb
shamu-0.0.11 lib/shamu/security/policy_refinement.rb
shamu-0.0.9 lib/shamu/security/policy_refinement.rb
shamu-0.0.8 lib/shamu/security/policy_refinement.rb
shamu-0.0.7 lib/shamu/security/policy_refinement.rb
shamu-0.0.5 lib/shamu/security/policy_refinement.rb
shamu-0.0.4 lib/shamu/security/policy_refinement.rb
shamu-0.0.3 lib/shamu/security/policy_refinement.rb
shamu-0.0.2 lib/shamu/security/policy_refinement.rb