module Micro::Authorization::Permissions::ForEachFeature

Constants

ANY
DOT
EXCEPT
ONLY

Public Instance Methods

authorize?(role, inside:, to:) click to toggle source
# File lib/micro/authorization/permissions/for_each_feature.rb, line 13
def authorize?(role, inside:, to:)
  to.all? { |feature| permit?(inside, role[feature]) }
end

Private Instance Methods

allow?(current_context, feature_context) click to toggle source
# File lib/micro/authorization/permissions/for_each_feature.rb, line 46
def allow?(current_context, feature_context)
  Utils.downcased_strings(feature_context).any? do |expectation|
    Array(expectation.split(DOT))
      .all? { |expected_value| current_context.include?(expected_value) }
  end
end
permit(current_context, feature_permission) click to toggle source
# File lib/micro/authorization/permissions/for_each_feature.rb, line 35
def permit(current_context, feature_permission)
  feature_context = feature_permission[ANY]
  return feature_context unless feature_context.nil?

  feature_context = feature_permission[ONLY]
  return allow?(current_context, feature_context) if feature_context

  feature_context = feature_permission[EXCEPT]
  !allow?(current_context, feature_context) if feature_context
end
permit!(current_context, feature_permission) click to toggle source
# File lib/micro/authorization/permissions/for_each_feature.rb, line 27
def permit!(current_context, feature_permission)
  result = permit(current_context, feature_permission)

  return result unless result.nil?

  raise NotImplementedError
end
permit?(current_context, feature_permission) click to toggle source
# File lib/micro/authorization/permissions/for_each_feature.rb, line 19
def permit?(current_context, feature_permission)
  case feature_permission
  when true then true
  when false, nil then false
  else permit!(current_context, feature_permission)
  end
end