Sha256: 84a8d7b0705b73faf503cae78b3a61398228480ae9294468a133fdf44597e279

Contents?: true

Size: 1.72 KB

Versions: 5

Compression:

Stored size: 1.72 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 authorized?(permission_action, resource: nil)
        return unless resource || question

        ActionAuthorizer.new(user, permission_action, question, resource).authorize.ok?
      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

        # check if question has been limited by admins first
        return unless authorized? :vote

        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.21.0 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.20.1 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.20.0 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.19.1 app/permissions/decidim/consultations/permissions.rb
decidim-consultations-0.19.0 app/permissions/decidim/consultations/permissions.rb