Sha256: 595528a6d6110c443b1accdd92aacdb3329d2d50c8a6620325e75f8ee1c3a3c2

Contents?: true

Size: 921 Bytes

Versions: 9

Compression:

Stored size: 921 Bytes

Contents

class Guide::Bouncer
  def initialize(authorisation_system:)
    @authorisation_system = authorisation_system
  end

  def user_can_access?(node)
    visible_to_user?(node.id, node.options[:visibility])
  end

  def user_is_privileged?
    @authorisation_system.user_is_privileged?
  end

  private

  def visible_to_user?(label, visibility)
    return true if visibility.blank?

    if valid_visibility_options.include?(visibility)
      @authorisation_system.allow?(:"view_guide_#{visibility}")
    else
      raise Guide::Errors::InvalidVisibilityOption, <<-EOS.gsub(' ,', ' nil,').squish
        You tried to give :#{label} a visibility of :#{visibility},
        but :#{visibility} is not a valid selection.
        Valid visibility options include:
        #{valid_visibility_options.join(', :')}.
      EOS
    end
  end

  def valid_visibility_options
    @authorisation_system.valid_visibility_options
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
guide-0.8.0 app/models/guide/bouncer.rb
guide-0.7.0 app/models/guide/bouncer.rb
guide-0.6.1 app/models/guide/bouncer.rb
guide-0.6.0 app/models/guide/bouncer.rb
guide-0.5.0 app/models/guide/bouncer.rb
guide-0.4.1 app/models/guide/bouncer.rb
guide-0.4.0 app/models/guide/bouncer.rb
guide-0.3.2 app/models/guide/bouncer.rb
guide-0.3.1 app/models/guide/bouncer.rb