Sha256: 208c8d44d3853cd38064b7f7b590aa6f7399fc7f533525df6de2059ae48d7beb

Contents?: true

Size: 1.68 KB

Versions: 53

Compression:

Stored size: 1.68 KB

Contents

# frozen_string_literal: true

module PgEngine
  class ApplicationPolicy
    attr_reader :user, :record

    def initialize(user, record)
      @user = user
      @record = record
    end

    def editar_en_lugar?
      puede_editar?
    end

    def index?
      raise "esta policy se llama con la clase modelo y no con #{record.class}" unless record.class

      acceso_total? || Pundit.policy_scope!(user, record).any?
    end

    def show?
      # scope.where(id: record.id).exists?
      acceso_total?
    end

    def create?
      puede_crear?
    end

    def new?
      create?
    end

    def update?
      puede_editar? && !objeto_borrado?
    end

    def edit?
      update?
    end

    def destroy?
      puede_borrar? && !objeto_borrado?
    end

    def scope
      Pundit.policy_scope!(user, record.class)
    end

    class Scope
      attr_reader :user, :scope

      def initialize(user, scope)
        @user = user
        @scope = scope
      end

      def resolve
        if policy.acceso_total?
          scope.all
        else
          scope.none
        end
      end

      def policy
        raise "el scope debe ser una clase modelo y no #{scope.class}" unless scope.class

        Pundit.policy!(user, scope)
      end
    end

    def puede_editar?
      acceso_total?
    end

    def puede_crear?
      acceso_total?
    end

    def puede_borrar?
      acceso_total?
    end

    def export?
      acceso_total?
    end

    def acceso_total?
      user&.developer?
    end

    def objeto_borrado?
      if record.respond_to?(:deleted?)
        record.deleted?
      elsif record.respond_to?(:discarded?)
        record.discarded?
      else
        false
      end
    end
  end
end

Version data entries

53 entries across 53 versions & 1 rubygems

Version Path
pg_rails-7.0.8.pre.alpha.56 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.55 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.54 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.53 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.52 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.51 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.50 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.49 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.48 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.47 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.46 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.45 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.44 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.43 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.42 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.41 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.40 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.39 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.38 pg_engine/app/policies/pg_engine/application_policy.rb
pg_rails-7.0.8.pre.alpha.37 pg_engine/app/policies/pg_engine/application_policy.rb