Class: Lyra::Privacy::GDPRCompliance
- Inherits:
-
Object
- Object
- Lyra::Privacy::GDPRCompliance
- Defined in:
- lib/lyra/privacy/gdpr_compliance.rb,
lib/lyra/privacy/policy_integration.rb
Overview
Extend GDPRCompliance with policy integration
Instance Attribute Summary collapse
-
#pam_compliance ⇒ Object
readonly
Returns the value of attribute pam_compliance.
Instance Method Summary collapse
-
#consent_audit ⇒ Object
Consent Audit.
-
#data_export ⇒ Object
Right to Access (Article 15).
-
#detect_pii_with_policy(attributes, policy_name, use_detector: true) ⇒ Object
Use privacy policy for PII detection if available.
-
#full_report ⇒ Object
Full GDPR Compliance Report.
-
#initialize(subject_id:, subject_type: 'User') ⇒ GDPRCompliance
constructor
Initialize GDPR compliance handler.
-
#portable_export(format: :json) ⇒ Object
Right to Data Portability (Article 20).
-
#processing_activities ⇒ Object
Processing Activities Record (Article 30).
-
#rectification_history ⇒ Object
Right to Rectification (Article 16).
-
#retention_compliance_check ⇒ Object
Data Retention Compliance Check.
-
#retention_compliance_with_policy(policy_name) ⇒ Object
Check retention compliance with policy Returns nil for models without defined retention (infinite/manual).
-
#right_to_be_forgotten_report ⇒ Object
Right to be Forgotten (Article 17).
Constructor Details
#initialize(subject_id:, subject_type: 'User') ⇒ GDPRCompliance
Initialize GDPR compliance handler
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 26 def initialize(subject_id:, subject_type: 'User') @subject_id = subject_id @subject_type = subject_type @pam_compliance = PamDsl::GDPRCompliance.new( subject_id: subject_id, subject_type: subject_type, event_reader: method(:read_subject_events), attribute_extractor: method(:extract_attributes), timestamp_extractor: method(:extract_timestamp), operation_extractor: method(:extract_operation), model_class_extractor: method(:extract_model_class), model_id_extractor: method(:extract_model_id), changes_extractor: method(:extract_changes), retention_policy: Lyra.config.retention_policy || default_retention_policy ) end |
Instance Attribute Details
#pam_compliance ⇒ Object (readonly)
Returns the value of attribute pam_compliance.
19 20 21 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 19 def pam_compliance @pam_compliance end |
Instance Method Details
#consent_audit ⇒ Object
Consent Audit
77 78 79 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 77 def pam_compliance. end |
#data_export ⇒ Object
Right to Access (Article 15)
47 48 49 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 47 def data_export pam_compliance.data_export end |
#detect_pii_with_policy(attributes, policy_name, use_detector: true) ⇒ Object
Use privacy policy for PII detection if available
211 212 213 214 |
# File 'lib/lyra/privacy/policy_integration.rb', line 211 def detect_pii_with_policy(attributes, policy_name, use_detector: true) integration = PolicyIntegration.new(policy_name, use_detector: use_detector) integration.detect_pii(attributes) end |
#full_report ⇒ Object
Full GDPR Compliance Report
82 83 84 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 82 def full_report pam_compliance.full_report end |
#portable_export(format: :json) ⇒ Object
Right to Data Portability (Article 20)
57 58 59 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 57 def portable_export(format: :json) pam_compliance.portable_export(format: format) end |
#processing_activities ⇒ Object
Processing Activities Record (Article 30)
67 68 69 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 67 def processing_activities pam_compliance.processing_activities end |
#rectification_history ⇒ Object
Right to Rectification (Article 16)
62 63 64 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 62 def rectification_history pam_compliance.rectification_history end |
#retention_compliance_check ⇒ Object
Data Retention Compliance Check
72 73 74 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 72 def retention_compliance_check pam_compliance.retention_compliance_check end |
#retention_compliance_with_policy(policy_name) ⇒ Object
Check retention compliance with policy Returns nil for models without defined retention (infinite/manual)
218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/lyra/privacy/policy_integration.rb', line 218 def retention_compliance_with_policy(policy_name) integration = PolicyIntegration.new(policy_name) events = collect_all_events events.group_by { |e| e.model_class }.map do |model_class, model_events| retention_duration = integration.retention_duration(model_class) # nil means infinite/manual retention - always compliant if retention_duration.nil? { model_class: model_class, total_events: model_events.count, expired_events: 0, retention_period: nil, compliance_status: :manual, expired_event_ids: [] } else expired = model_events.select do |event| event. && event. < (Time.current - retention_duration) end { model_class: model_class, total_events: model_events.count, expired_events: expired.count, retention_period: retention_duration, compliance_status: expired.empty? ? :compliant : :requires_action, expired_event_ids: expired.map(&:event_id) } end end end |
#right_to_be_forgotten_report ⇒ Object
Right to be Forgotten (Article 17)
52 53 54 |
# File 'lib/lyra/privacy/gdpr_compliance.rb', line 52 def right_to_be_forgotten_report pam_compliance.right_to_be_forgotten_report end |