Module: Sequel::Plugins::Privacy

Extended by:
T::Sig
Defined in:
lib/sequel/plugins/privacy.rb

Overview

Privacy plugin for Sequel models.

Provides:

  • Policy definition DSL (privacy block)
  • Field-level privacy protection (field in privacy block)
  • Privacy-aware queries (for_vc method)
  • Automatic association privacy enforcement

Usage:

class Member < Sequel::Model
plugin :privacy

privacy do
  can :view, P::AllowSelf, P::AllowAdmins
  can :edit, P::AllowSelf, P::AllowAdmins

  field :email, P::AllowSelf
  field :phone, P::AllowSelf, P::AllowFriends
end
end

# Query with privacy enforcement
vc = Sequel::Privacy::ViewerContext.for_actor(current_user)
members = Member.for_vc(vc).where(org_id: 1).all

# Check permissions
member.allow?(vc, :view)  # => true/false
member.email              # => nil if :view_email denies

Defined Under Namespace

Modules: ClassMethods, DatasetMethods, InstanceMethods Classes: AssociationPrivacyDSL, PrivacyDSL

Class Method Summary collapse

Class Method Details

.apply(model, _opts = {}) ⇒ Object



40
41
42
43
44
45
46
47
# File 'lib/sequel/plugins/privacy.rb', line 40

def self.apply(model, _opts = {})
  model.instance_variable_set(:@privacy_policies, {})
  model.instance_variable_set(:@privacy_fields, {})
  model.instance_variable_set(:@privacy_association_policies, {})
  model.instance_variable_set(:@privacy_finalized, false)
  model.instance_variable_set(:@allow_unsafe_access, false)
  model.instance_variable_set(:@privacy_wrapped_association_reflections, {})
end

.configure(model, opts = {}) ⇒ Object



50
51
52
53
54
# File 'lib/sequel/plugins/privacy.rb', line 50

def self.configure(model, opts = {})
  model.all_association_reflections.each do |reflection|
    model.send(:_setup_privacy_association_readers, reflection[:type], reflection[:name], true)
  end
end