app/permissions/decidim/debates/admin/permissions.rb



# frozen_string_literal: true

module Decidim
  module Debates
    module Admin
      class Permissions < Decidim::DefaultPermissions
        def permissions
          # The public part needs to be implemented yet
          return permission_action if permission_action.scope != :admin

          can_export_comments?

          return permission_action if permission_action.subject != :debate

          case permission_action.action
          when :create, :read, :export
            allow!
          when :update
            toggle_allow(debate && !debate.closed? && debate.official?)
          when :delete, :close
            toggle_allow(debate && debate.official?)
          end

          permission_action
        end

        private

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

        def can_export_comments?
          allow! if permission_action.subject == :comments && permission_action.action == :export
        end
      end
    end
  end
end