Class: LcpRuby::Permissions::Registry

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/permissions/registry.rb

Class Method Summary collapse

Class Method Details

.all_definitionsArray<Metadata::PermissionDefinition>

Returns all active DB permission definitions (parsed). Used by impersonation to collect role names.

Returns:



29
30
31
32
33
34
35
# File 'lib/lcp_ruby/permissions/registry.rb', line 29

def all_definitions
  return [] unless available?

  monitor.synchronize do
    load_all_definitions
  end
end

.available?Boolean

Whether the permission_config table is ready to query.

Returns:

  • (Boolean)


59
60
61
# File 'lib/lcp_ruby/permissions/registry.rb', line 59

def available?
  @available == true
end

.clear!Object

Full reset - called from LcpRuby.reset!



51
52
53
54
55
56
# File 'lib/lcp_ruby/permissions/registry.rb', line 51

def clear!
  monitor.synchronize do
    @available = false
    @cache = {}
  end
end

.for_model(model_name) ⇒ Metadata::PermissionDefinition?

Returns cached PermissionDefinition for a given model name, or nil.

Parameters:

  • model_name (String)

    the model name to query (or “_default”)

Returns:



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/lcp_ruby/permissions/registry.rb', line 10

def for_model(model_name)
  return nil unless available?

  key = model_name.to_s
  result, operation = monitor.synchronize do
    if @cache.key?(key)
      [ @cache[key], :hit ]
    else
      @cache[key] = load_and_parse(key)
      [ @cache[key], :miss ]
    end
  end
  ActiveSupport::Notifications.instrument("cache.lcp_ruby", cache: "permissions", operation: operation.to_s)
  result
end

.mark_available!Object

Mark registry as available (called after contract validation passes).



64
65
66
67
# File 'lib/lcp_ruby/permissions/registry.rb', line 64

def mark_available!
  @available = true
  @cache ||= {}
end

.reload!(model_name = nil) ⇒ Object

Clear cache for one model or all models.

Parameters:

  • model_name (String, nil) (defaults to: nil)

    specific model to reload, or nil for all



39
40
41
42
43
44
45
46
47
48
# File 'lib/lcp_ruby/permissions/registry.rb', line 39

def reload!(model_name = nil)
  monitor.synchronize do
    if model_name
      @cache.delete(model_name.to_s)
    else
      @cache = {}
    end
  end
  ActiveSupport::Notifications.instrument("cache.lcp_ruby", cache: "permissions", operation: "invalidate")
end