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



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

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)
end

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



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

def self.configure(model, opts = {})
  # Currently no per-model configuration needed
end