Class: Sequel::Plugins::Privacy::AssociationPrivacyDSL
- Inherits:
-
Object
- Object
- Sequel::Plugins::Privacy::AssociationPrivacyDSL
- Extended by:
- T::Sig
- Defined in:
- lib/sequel/plugins/privacy.rb
Overview
DSL class for defining association-level privacy policies
Instance Method Summary collapse
- #can(action, *policies) ⇒ Object
- #finalize_association! ⇒ Object
-
#initialize(model_class, assoc_name, policy_resolver) ⇒ AssociationPrivacyDSL
constructor
A new instance of AssociationPrivacyDSL.
Constructor Details
#initialize(model_class, assoc_name, policy_resolver) ⇒ AssociationPrivacyDSL
Returns a new instance of AssociationPrivacyDSL.
63 64 65 66 67 68 |
# File 'lib/sequel/plugins/privacy.rb', line 63 def initialize(model_class, assoc_name, policy_resolver) @model_class = model_class @assoc_name = assoc_name @policy_resolver = policy_resolver @pending_policies = T.let({}, T::Hash[Symbol, T::Array[T.untyped]]) end |
Instance Method Details
#can(action, *policies) ⇒ Object
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/sequel/plugins/privacy.rb', line 72 def can(action, *policies) unless %i[add remove remove_all].include?(action) Kernel.raise ArgumentError, "Association action must be :add, :remove, or :remove_all, got #{action.inspect}" end resolved = @policy_resolver.(policies) @pending_policies[action] ||= [] T.must(@pending_policies[action]).concat(resolved) end |
#finalize_association! ⇒ Object
85 86 87 88 89 90 |
# File 'lib/sequel/plugins/privacy.rb', line 85 def finalize_association! @pending_policies.each do |action, policies| @model_class.register_association_policies(@assoc_name, action, policies, defer_setup: true) end @model_class.setup_association_privacy(@assoc_name) end |