Sha256: 154383765a1fd7ddcded1fe20bd844978b5e945e5e48545eaa16e110d12b1072

Contents?: true

Size: 1.36 KB

Versions: 14

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true
require 'dry/monads'

module Hyrax
  module Transactions
    module Steps
      ##
      # Saves the Hyrax::AccessControlList for any resource with a `#permission_manager`.
      # If `#permission_manager` is undefined, succeeds.
      #
      # @see https://dry-rb.org/gems/dry-monads/1.0/result/
      class SaveAccessControl
        include Dry::Monads[:result]

        ##
        # @param [Valkyrie::Resource] obj
        #
        # @return [Dry::Monads::Result]
        def call(obj, permissions_params: [])
          return Success(obj) unless obj.respond_to?(:permission_manager)

          acl = obj.permission_manager&.acl
          # Translate step args into Hyrax::Permission objects before saving
          Array(permissions_params).each do |param|
            permission = param_to_permission(obj, param)
            acl << permission if permission
          end

          acl&.save || (return Failure[:failed_to_save_acl, acl])

          Success(obj)
        end

        private

        def param_to_permission(obj, param)
          return nil unless param["access"] && param["type"] && param["name"]
          mode = param["access"].to_sym
          agent = param["type"] == "group" ? "group/#{param['name']}" : param["name"]
          Hyrax::Permission.new(access_to: obj.id, mode: mode, agent: agent)
        end
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
hyrax-5.1.0.pre.beta1 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.4 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.3 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.2 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.1 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.0 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.0.rc3 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.0.rc2 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-5.0.0.rc1 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-4.0.0 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-4.0.0.rc3 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-4.0.0.rc2 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-4.0.0.rc1 lib/hyrax/transactions/steps/save_access_control.rb
hyrax-4.0.0.beta2 lib/hyrax/transactions/steps/save_access_control.rb