Sha256: a9cf850e58fb518ff0e4c2cf25e88321964c51c019f6eb6b2e1ebd359ba9aa69
Contents?: true
Size: 1.22 KB
Versions: 1
Compression:
Stored size: 1.22 KB
Contents
# frozen_string_literal: true module Pragma module Macro def self.Policy(name: :default, action: nil) step = ->(input, options) { Policy.for(input, name, options, action) } [step, name: "policy.#{name}"] end module Policy class << self def for(input, name, options, action = nil) klass = Macro.require_skill('Policy', "policy.#{name}.class", options) policy = klass.new( options['policy.context'] || options['current_user'], options['model'] ) action_name = action.is_a?(Proc) ? action.call(options) : action action_name ||= input.class.operation_name options["result.policy.#{name}"] = Trailblazer::Operation::Result.new( policy.send("#{action_name}?"), 'policy' => policy ) unless options["result.policy.#{name}"].success? handle_unauthorized!(options) return false end true end private def handle_unauthorized!(options) options['result.response'] = Pragma::Operation::Response::Forbidden.new.decorate_with( Pragma::Decorator::Error ) end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
pragma-2.5.0 | lib/pragma/macro/policy.rb |