Sha256: 6cec48aea0e2a869dfec678c4af1f71acf763114f5bb48ab3ef9c722544400d6

Contents?: true

Size: 1.41 KB

Versions: 91

Compression:

Stored size: 1.41 KB

Contents

# frozen_string_literal: true

module Motor
  module BuildSchema
    module ApplyPermissions
      module_function

      def call(schema, ability)
        schema.map do |model|
          klass = model[:class_name].constantize

          next unless ability.can?(:read, klass)

          model[:associations] = filter_associations(model[:associations], ability)
          model[:columns] = filter_columns(klass, model[:columns], ability)
          model[:actions] = filter_actions(klass, model[:actions], ability)

          model
        end.compact
      end

      def filter_associations(associations, ability)
        associations.select do |assoc|
          ability.can?(:read, assoc[:model_name].classify.constantize)
        end
      end

      def filter_columns(model, columns, ability)
        columns.map do |column|
          next unless ability.can?(:read, model, column[:name])

          next if column.dig(:reference, :model_name).present? &&
                  !ability.can?(:read, column[:reference][:model_name].classify.constantize)

          unless ability.can?(:update, model, column[:name])
            column = column.merge(access_type: BuildSchema::ColumnAccessTypes::READ_ONLY)
          end

          column
        end.compact
      end

      def filter_actions(model, actions, ability)
        actions.select do |action|
          ability.can?(action[:name].to_sym, model)
        end
      end
    end
  end
end

Version data entries

91 entries across 91 versions & 1 rubygems

Version Path
motor-admin-0.2.51 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.50 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.49 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.48 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.47 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.44 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.43 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.41 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.39 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.38 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.37 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.36 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.35 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.34 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.33 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.32 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.31 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.30 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.29 lib/motor/build_schema/apply_permissions.rb
motor-admin-0.2.28 lib/motor/build_schema/apply_permissions.rb