Class: LcpRuby::Permissions::SourceResolver

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

Class Method Summary collapse

Class Method Details

.for(model_name, loader) ⇒ Metadata::PermissionDefinition?

Resolves a PermissionDefinition for the given model name.

In :yaml mode, delegates directly to the loader’s YAML-based lookup.

In :model mode, uses first-found-wins resolution (no merging):

1. DB record for this specific model
2. DB record for "_default"
3. YAML fallback for this specific model

Parameters:

  • model_name (String)

    the model name

  • loader (Metadata::Loader)

    the metadata loader

Returns:



16
17
18
19
20
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
# File 'lib/lcp_ruby/permissions/source_resolver.rb', line 16

def self.for(model_name, loader)
  if LcpRuby.configuration.permission_source == :model && Registry.available?
    # Try DB for this specific model
    perm_def = Registry.for_model(model_name)
    if perm_def
      set_db_source!(perm_def)
      return perm_def
    end

    # STI child fallback: try parent model in DB
    model_def = loader.model_definitions[model_name.to_s]
    if (parent_name = model_def&.sti_parent_name)
      perm_def = Registry.for_model(parent_name)
      if perm_def
        set_db_source!(perm_def)
        return perm_def
      end
    end

    # Try DB _default
    perm_def = Registry.for_model("_default")
    if perm_def
      set_db_source!(perm_def)
      return perm_def
    end
  end

  # YAML fallback (also used when permission_source is :yaml)
  # (yaml_permission_definition already has STI parent fallback)
  loader.yaml_permission_definition(model_name)
end