Module: Protector::Adapters::Sequel::Dataset

Extended by:
ActiveSupport::Concern
Defined in:
lib/protector/adapters/sequel/dataset.rb

Overview

Patches Sequel::Dataset

Defined Under Namespace

Classes: Restrictor

Instance Method Summary collapse

Instance Method Details

#can?(action, field = false) ⇒ Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/protector/adapters/sequel/dataset.rb', line 37

def can?(action, field=false)
  protector_meta.can?(action, field)
end

#creatable?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/protector/adapters/sequel/dataset.rb', line 33

def creatable?
  model.new.restrict!(protector_subject).creatable?
end

#each_with_protector(*args, &block) ⇒ Object

Substitutes row_proc with Protector and injects protection scope



47
48
49
50
51
52
53
54
55
# File 'lib/protector/adapters/sequel/dataset.rb', line 47

def each_with_protector(*args, &block)
  return each_without_protector(*args, &block) unless protector_subject?

  relation = protector_defend_graph(clone, protector_subject)
  relation = protector_meta.eval_scope_procs(relation) if protector_meta.scoped?

  relation.row_proc = Restrictor.new(protector_subject, relation.row_proc)
  relation.each_without_protector(*args, &block)
end

#protector_defend_graph(relation, subject) ⇒ Object

Injects protection scope for every joined graph association



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/protector/adapters/sequel/dataset.rb', line 58

def protector_defend_graph(relation, subject)
  return relation unless @opts[:eager_graph]

  @opts[:eager_graph][:reflections].each do |association, reflection|
    model = reflection[:cache][:class] if reflection[:cache].is_a?(Hash) && reflection[:cache][:class]
    model = reflection[:class_name].constantize unless model
    meta  = model.protector_meta.evaluate(subject)

    relation = meta.eval_scope_procs(relation) if meta.scoped?
  end

  relation
end

#protector_meta(subject = protector_subject) ⇒ Object

Gets DSL::Meta::Box of this dataset



42
43
44
# File 'lib/protector/adapters/sequel/dataset.rb', line 42

def protector_meta(subject=protector_subject)
  model.protector_meta.evaluate(subject)
end