Sha256: 2515c011561f2911a06f301d68486f3daed9bff471d2b4f1308542964746e186

Contents?: true

Size: 1.15 KB

Versions: 3

Compression:

Stored size: 1.15 KB

Contents

# frozen_string_literal: true

module Decidim
  module Consultations
    module Abilities
      # Defines the base abilities related to consultations and questions for
      # authenticated users. Intended to be used with `cancancan`.
      class CurrentUserAbility < Decidim::Abilities::EveryoneAbility
        attr_reader :user

        def initialize(user, context)
          super(user, context)
          return unless user

          @user = user

          can :vote, Question do |question|
            can_vote?(question)
          end

          can :unvote, Question do |question|
            can_unvote?(question)
          end
        end

        private

        def can_vote?(question)
          question.organization.id == user.organization.id &&
            question.consultation.active? &&
            question.consultation.published? &&
            question.published? &&
            !question.voted_by?(user)
        end

        def can_unvote?(question)
          question.consultation.active? &&
            question.consultation.published? &&
            question.published? &&
            question.voted_by?(user)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
decidim-consultations-0.11.2 app/models/decidim/consultations/abilities/current_user_ability.rb
decidim-consultations-0.11.1 app/models/decidim/consultations/abilities/current_user_ability.rb
decidim-consultations-0.11.0.pre1 app/models/decidim/consultations/abilities/current_user_ability.rb