legion-rbac 0.3.5 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c62ae3d8b8ed4b7285f13ecc1e5d90d79f343cf98a4d56a342af761aba03185
4
- data.tar.gz: f705bad75d3d459e82463c50d3110df25e847d36f2e092e88e10ae545ba67cac
3
+ metadata.gz: 661aa1753cf4b4bc9ab854c5f0c3b70862718cb36ffab5ad395bb3f0b784ec18
4
+ data.tar.gz: 584b14c5cb4d084c160ef5b12015d15c06dbdea1f6eefa5a28b4d7a42237f818
5
5
  SHA512:
6
- metadata.gz: c7d12ee4a0eaac6ea80132816a429dac7621253a4d720ef69dceaedcf1a00b63af70f0004b4c3e1bbec3f48ff9c8e8eb34eee8f0365e3abbd6a96b94c86727c4
7
- data.tar.gz: 7f62612de461d2339ea9d70c9de87d5b8cc601622986a51ae3dfa02a22ac78d709b46dbc4ff5ad7cd78d8418f6ee2defa9912d9d2cc187ddb48a8f0541305fbf
6
+ metadata.gz: 5f93ebba6bc19cad6876baa1124190689c09d3b3c053422f27eb8688c25216224d848aae90e313fc638a7caea07bd303f853a0d15a7ea84a8c1383e13e9a379e
7
+ data.tar.gz: 3c3f61943d75c2241797147091b313cf2355dea9d309227c2a62acf80126902b5186297a41bf02c14ee5cf10e6c7ab0676728e7e65ae138b83e1b2b404461170
@@ -8,13 +8,17 @@ on:
8
8
 
9
9
  jobs:
10
10
  ci:
11
- uses: LegionIO/.github/.github/workflows/ci.yml@main
11
+ uses: LegionIO/.github/.github/workflows/ci.yml@e0fc7364b73f446d4cb9bdc162a66ed34bf0daa7
12
+ with:
13
+ companion-gems: ${{ github.event_name == 'pull_request' && '{"legion-settings":{"repository":"LegionIO/legion-settings","ref":"8e73a9ef3c13958e3e1e7fc98532e41283159706"}}' || '{}' }}
12
14
 
13
15
  lint:
14
16
  uses: LegionIO/.github/.github/workflows/lint-patterns.yml@main
15
17
 
16
18
  security:
17
- uses: LegionIO/.github/.github/workflows/security-scan.yml@main
19
+ uses: LegionIO/.github/.github/workflows/security-scan.yml@e0fc7364b73f446d4cb9bdc162a66ed34bf0daa7
20
+ with:
21
+ companion-gems: ${{ github.event_name == 'pull_request' && '{"legion-settings":{"repository":"LegionIO/legion-settings","ref":"8e73a9ef3c13958e3e1e7fc98532e41283159706"}}' || '{}' }}
18
22
 
19
23
  version-changelog:
20
24
  uses: LegionIO/.github/.github/workflows/version-changelog.yml@main
data/.gitignore CHANGED
@@ -10,3 +10,4 @@
10
10
  /.idea/
11
11
  *.key
12
12
  .rspec_status
13
+ *.gem
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.3.6] - 2026-11-01
4
+
5
+ ### Fixed
6
+ - Register RBAC security defaults at load and read live Settings for enablement, enforcement, capability audits, and group mappings without optional-Settings fallbacks.
7
+
3
8
  ## [0.3.5] - 2026-10-30
4
9
 
5
10
  ### Fixed
data/Gemfile CHANGED
@@ -3,6 +3,11 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ companion_root = File.directory?(File.expand_path('.ci-dependencies', __dir__)) ? '.ci-dependencies' : '..'
8
+ settings_path = File.expand_path("#{companion_root}/legion-settings", __dir__)
9
+ gem 'legion-settings', path: settings_path if File.directory?(settings_path)
10
+
6
11
  group :test do
7
12
  gem 'legion-logging'
8
13
  gem 'rake'
data/README.md CHANGED
@@ -108,7 +108,7 @@ legion rbac check user-1 runners/lex-http/* --action execute --roles worker
108
108
 
109
109
  ## Configuration
110
110
 
111
- Default roles are defined in settings under `rbac.roles`. Custom roles can be added via settings merge or config files.
111
+ Loading `legion/rbac` registers security defaults in `Legion::Settings[:rbac]`. Custom roles can be added under `rbac.roles` via settings merge or config files. Runtime enablement, enforcement, capability-audit policy, and group-role mappings read the live tree: `enabled: false` disables RBAC, while `enforce: false` retains evaluation and reports `would_deny` without blocking. After a full `Legion::Settings.reset!`, explicitly register RBAC defaults again before setup.
112
112
 
113
113
  ## Requirements
114
114
 
data/legion-rbac.gemspec CHANGED
@@ -28,5 +28,5 @@ Gem::Specification.new do |spec|
28
28
 
29
29
  spec.add_dependency 'legion-json', '>= 1.2.0'
30
30
  spec.add_dependency 'legion-logging', '>= 1.5.0'
31
- spec.add_dependency 'legion-settings', '>= 1.3.12'
31
+ spec.add_dependency 'legion-settings', '>= 1.4.5'
32
32
  end
@@ -100,13 +100,11 @@ module Legion
100
100
  end
101
101
 
102
102
  def enabled?
103
- settings = capability_audit_settings
104
- settings[:enabled] != false
103
+ Legion::Settings[:rbac][:capability_audit][:enabled] != false
105
104
  end
106
105
 
107
106
  def mode
108
- settings = capability_audit_settings
109
- (settings[:mode] || 'enforce').to_s
107
+ Legion::Settings[:rbac][:capability_audit][:mode].to_s
110
108
  end
111
109
 
112
110
  private
@@ -161,12 +159,6 @@ module Legion
161
159
  reason: reason
162
160
  )
163
161
  end
164
-
165
- def capability_audit_settings
166
- return {} unless defined?(Legion::Settings)
167
-
168
- Legion::Settings[:rbac]&.dig(:capability_audit) || {}
169
- end
170
162
  end
171
163
  end
172
164
  end
@@ -6,7 +6,7 @@ module Legion
6
6
  # Resolve RBAC roles from group memberships using a configurable map.
7
7
  #
8
8
  # @param groups [Array<String>] group names or OIDs from identity provider
9
- # @param group_role_map [Hash, nil] { group_name => role_name }; reads default_map when nil
9
+ # @param group_role_map [Hash, nil] { group_name => role_name }; reads live settings when nil
10
10
  # @return [Array<String>] resolved role names (may be empty)
11
11
  #
12
12
  # NOTE: v1 supports exact string match only. Regexp keys in group_role_map are NOT supported —
@@ -15,7 +15,7 @@ module Legion
15
15
  def self.resolve_roles(groups:, group_role_map: nil)
16
16
  return [] unless Legion::Rbac.enabled?
17
17
 
18
- map = group_role_map || default_map
18
+ map = group_role_map || Legion::Settings[:rbac][:group_role_map]
19
19
  return [] if groups.nil? || groups.empty? || map.empty?
20
20
 
21
21
  normalized_map = {}
@@ -45,15 +45,6 @@ module Legion
45
45
  existing_roles = principal[:roles] || []
46
46
  principal.merge(roles: (existing_roles + additional_roles).uniq)
47
47
  end
48
-
49
- def self.default_map
50
- return {} unless defined?(Legion::Settings)
51
-
52
- rbac_settings = Legion::Settings[:rbac]
53
- rbac_settings&.dig(:group_role_map) || {}
54
- end
55
-
56
- private_class_method :default_map
57
48
  end
58
49
  end
59
50
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'legion/logging'
4
+ require 'legion/settings'
4
5
 
5
6
  module Legion
6
7
  module Rbac
@@ -136,3 +137,5 @@ module Legion
136
137
  end
137
138
  end
138
139
  end
140
+
141
+ Legion::Settings.register_library(:rbac, Legion::Rbac::Settings.default)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Legion
4
4
  module Rbac
5
- VERSION = '0.3.5'
5
+ VERSION = '0.3.6'
6
6
  end
7
7
  end
data/lib/legion/rbac.rb CHANGED
@@ -55,7 +55,6 @@ module Legion
55
55
 
56
56
  def setup
57
57
  log.info 'Legion::Rbac setup started'
58
- Legion::Settings.merge_settings(:rbac, Legion::Rbac::Settings.default)
59
58
  unless enabled?
60
59
  update_role_index(EMPTY_ROLE_INDEX, connected: false)
61
60
  log.info 'Legion::Rbac disabled via settings'
@@ -74,21 +73,17 @@ module Legion
74
73
  end
75
74
 
76
75
  def enabled?
77
- return true unless defined?(Legion::Settings)
78
-
79
- Legion::Settings[:rbac]&.fetch(:enabled, true) != false
76
+ Legion::Settings[:rbac][:enabled] != false
80
77
  end
81
78
 
82
79
  def enforcing?
83
- return true unless defined?(Legion::Settings)
84
-
85
- Legion::Settings[:rbac]&.fetch(:enforce, true) != false
80
+ Legion::Settings[:rbac][:enforce] != false
86
81
  end
87
82
 
88
83
  def events_enabled?
89
84
  return false unless defined?(Legion::Events)
90
85
 
91
- Legion::Settings[:rbac]&.fetch(:emit_events, true) != false
86
+ Legion::Settings[:rbac][:emit_events] != false
92
87
  rescue StandardError => e
93
88
  handle_exception(e, level: :warn, operation: 'rbac.events_enabled')
94
89
  false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: legion-rbac
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -43,14 +43,14 @@ dependencies:
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
- version: 1.3.12
46
+ version: 1.4.5
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 1.3.12
53
+ version: 1.4.5
54
54
  description: Role-based access control for LegionIO with team scoping and policy enforcement
55
55
  email:
56
56
  - matthewdiverson@gmail.com