Module: PhiAttrs::PhiRecord

Extended by:
ActiveSupport::Concern
Defined in:
lib/phi_attrs/phi_record.rb

Instance Method Summary collapse

Instance Method Details

#__phi_wrapped_methodsObject



61
62
63
# File 'lib/phi_attrs/phi_record.rb', line 61

def __phi_wrapped_methods
  attribute_names - self.class.__phi_exclude_methods.to_a + self.class.__phi_include_methods.to_a - [self.class.primary_key]
end

#allow_phi!(user_id, reason) ⇒ Object



65
66
67
68
69
70
71
72
73
# File 'lib/phi_attrs/phi_record.rb', line 65

def allow_phi!(user_id, reason)
  PhiAttrs::Logger.tagged( *phi_log_keys ) do
    @__phi_access_allowed = true
    @__phi_user_id = user_id
    @__phi_access_reason = reason

    PhiAttrs::Logger.info("PHI Access Enabled for '#{user_id}': #{reason}")
  end
end

#disallow_phi!Object



75
76
77
78
79
80
81
82
83
# File 'lib/phi_attrs/phi_record.rb', line 75

def disallow_phi!
  PhiAttrs::Logger.tagged(*phi_log_keys) do
    @__phi_access_allowed = false
    @__phi_user_id = nil
    @__phi_access_reason = nil

    PhiAttrs::Logger.info('PHI access disabled')
  end
end

#phi_access_reasonObject



93
94
95
# File 'lib/phi_attrs/phi_record.rb', line 93

def phi_access_reason
  @__phi_access_reason || RequestStore.store.dig(:phi_access, self.class.name, :reason)
end

#phi_allowed?Boolean

Returns:

  • (Boolean)


85
86
87
# File 'lib/phi_attrs/phi_record.rb', line 85

def phi_allowed?
  @__phi_access_allowed || RequestStore.store.dig(:phi_access, self.class.name, :phi_access_allowed)
end

#phi_allowed_byObject



89
90
91
# File 'lib/phi_attrs/phi_record.rb', line 89

def phi_allowed_by
  @__phi_user_id || RequestStore.store.dig(:phi_access, self.class.name, :user_id)
end

#wrap_phiObject



52
53
54
55
56
57
58
59
# File 'lib/phi_attrs/phi_record.rb', line 52

def wrap_phi
  # Disable PHI access by default
  @__phi_access_allowed = false
  @__phi_access_logged = false

  # Wrap attributes with PHI Logger and Access Control
  __phi_wrapped_methods.each { |attr| phi_wrap_method(attr) }
end