Sha256: 246909b59fa4ec6fe534430375e3460d91e53bb54d9034a834ce665a7223f2af

Contents?: true

Size: 1.31 KB

Versions: 5

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module Apicasso
  # Ability to parse a scope object from Apicasso::Key
  class Ability
    include CanCan::Ability

    def initialize(key)
      key ||= Apicasso::Key.new
      cannot :manage, :all
      cannot :read, :all
      key.scope.each do |permission, klasses_clearances|
        klasses_clearances.each do |klasses|
          klasses.each do |klass, clearance|
            if clearance == true
              # Usage:
              # To have a key reading all channels and all accouts
              # you would have a scope:
              # => `{read: [{channel: true}, {accout: true}]}`
              can permission.to_sym, klass.underscore.to_sym
              can permission.to_sym, klass.classify.constantize
            elsif clearance.class == Hash
              # Usage:
              # To have a key reading all banners from a channel with id 999
              # you would have a scope:
              # => `{read: [{banner: {owner_id: [999]}}]}`
              can permission.to_sym,
                  klass.underscore.to_sym
              clearance.each do |by_field, values|
                can permission.to_sym,
                    klass.classify.constantize,
                    by_field => values
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
apicasso-0.2.16 app/models/apicasso/ability.rb
apicasso-0.2.15 app/models/apicasso/ability.rb
apicasso-0.1.5 app/models/apicasso/ability.rb
apicasso-0.1.4 app/models/apicasso/ability.rb
apicasso-0.1.3 app/models/apicasso/ability.rb