Sha256: a5e98817a20b81a11aa3763ecdde8ed8502fde6e513e4338ef0a8f96a7cf8502

Contents?: true

Size: 1.43 KB

Versions: 5

Compression:

Stored size: 1.43 KB

Contents

# frozen_string_literal: true

module Decidim
  module Consultations
    class Permissions < Decidim::DefaultPermissions
      def permissions
        allowed_public_anonymous_action?

        return permission_action unless user
        allowed_public_action?

        return Decidim::Consultations::Admin::Permissions.new(user, permission_action, context).permissions if permission_action.scope == :admin

        permission_action
      end

      private

      def question
        @question ||= context.fetch(:question, nil)
      end

      def consultation
        @consultation ||= context.fetch(:consultation, nil)
      end

      def allowed_public_anonymous_action?
        return unless permission_action.action == :read
        return unless permission_action.scope == :public

        case permission_action.subject
        when :consultation_list
          allow!
        when :consultation
          toggle_allow(consultation.published? || user&.admin?)
        when :question
          toggle_allow(question.published? || user&.admin?)
        end
      end

      def allowed_public_action?
        return unless permission_action.scope == :public
        return unless permission_action.subject == :question

        case permission_action.action
        when :vote
          toggle_allow(question.can_be_voted_by?(user))
        when :unvote
          toggle_allow(question.can_be_unvoted_by?(user))
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
decidim-consultations-0.18.1 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.17.2 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.18.0 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.17.1 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.17.0 app/permissions/decidim/consultations/permissions.rb