Sha256: 80dbc4f47f55d23d550c8df196939d29c3961396297c419d13ad12028010ef83

Contents?: true

Size: 1.03 KB

Versions: 9

Compression:

Stored size: 1.03 KB

Contents

# frozen_string_literal: true

module Ibrain
  module Policies
    class BasePolicy
      IBRAIN_QUERY_RULES = {
        '*': {
          guard: ->(_obj, _args, _ctx) { true }
        }
      }

      IBRAIN_MUTATION_RULES = {
        '*': {
          guard: ->(_obj, _args, ctx) { roles.include?(ctx[:current_user].try(:role)) }
        }
      }

      RULES = {
        'Query' => IBRAIN_QUERY_RULES,
        'Mutation' => IBRAIN_MUTATION_RULES
      }.freeze

      class << self
        def roles
          Ibrain::Config.ibrain_roles
        end

        def has_permission?(current_user, resource)
          return false if current_user.blank?
          return true if current_user.super_admin?

          current_user.try(:scope).to_s.split(',').include?(resource)
        end

        def guard(type, field)
          RULES.dig(type.name, field, :guard)
        end

        def not_authorized_handler(type, field)
          RULES.dig(type, field, :not_authorized) || RULES.dig(type, :*, :not_authorized)
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ibrain-core-0.1.8 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.7 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.6 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.5 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.4 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.3 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.2 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.1 app/graphql/ibrain/policies/base_policy.rb
ibrain-core-0.1.0 app/graphql/ibrain/policies/base_policy.rb