Sha256: 157e1170af3726468ef19d96986cc80ce048d03e87f8ae21a6846eff70c41c30

Contents?: true

Size: 1.32 KB

Versions: 1

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

module Decidim
  module ActionDelegator
    module Admin
      class FixResourcePermissions < Decidim::Command
        def initialize(resources)
          @resources = resources
          @errors = []
        end

        # Executes the command. Broadcasts these events:
        #
        # - :ok when everything is valid.
        # - :invalid if the form wasn't valid and we couldn't proceed.
        #
        # Returns nothing.
        def call
          return broadcast(:invalid) if resources.blank?

          update_permissions

          return broadcast(:invalid) if errors.any?

          broadcast(:ok)
        end

        private

        attr_reader :resources, :errors

        def update_permissions
          resources.each do |resource|
            resource.resource_manifest.actions.each do |action|
              resource_permission ||= resource.resource_permission || resource.build_resource_permission
              next unless resource_permission.permissions.dig(action, "authorization_handlers", "delegations_verifier").nil?

              resource_permission.permissions.deep_merge!({ action => { "authorization_handlers" => { "delegations_verifier" => {} } } })
              @errors << resource unless resource_permission.save
            end
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
decidim-action_delegator-0.8.1 app/commands/decidim/action_delegator/admin/fix_resource_permissions.rb