Method: Admission::Tests.separate_privileges

Defined in:
lib/admission/tests/tests.rb

.separate_privileges(selector = nil, inheritance: true, list: all_privileges, &block) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/admission/tests/tests.rb', line 21

def separate_privileges selector=nil, inheritance: true, list: all_privileges, &block
  selector = block unless selector
  selector = [selector] if selector.is_a? String

  block = case selector
  when Array
    if inheritance
      ref_privileges = selector.map do |s|
        order.get *Admission::Privilege.split_text_key(s)
      end
      ->(p){
        ref_privileges.any?{|ref_p| p.eql_or_inherits? ref_p }
      }

    else
      ->(p){ selector.include? p.text_key }

    end

  when Proc
    selector

  else raise ArgumentError.new('bad selector type')
  end

  list.partition &block
end