Sha256: 0cb0d51e6f18fc7bd237841be01459d0e0cdb48e7c2f2178b78f1b4838cec9c7

Contents?: true

Size: 1.24 KB

Versions: 6

Compression:

Stored size: 1.24 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 |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.singularize.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.singularize.to_sym
            clearance.each do |by_field, values|
              can permission.to_sym,
                  klass.classify.constantize,
                  by_field.to_sym => values
            end
          end
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
apicasso-0.4.11 app/models/apicasso/ability.rb
apicasso-0.4.10 app/models/apicasso/ability.rb
apicasso-0.4.9 app/models/apicasso/ability.rb
apicasso-0.4.8 app/models/apicasso/ability.rb
apicasso-0.4.7 app/models/apicasso/ability.rb
apicasso-0.4.6 app/models/apicasso/ability.rb