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 +4 -4
- data/.github/workflows/ci.yml +6 -2
- data/.gitignore +1 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +5 -0
- data/README.md +1 -1
- data/legion-rbac.gemspec +1 -1
- data/lib/legion/rbac/capability_audit.rb +2 -10
- data/lib/legion/rbac/group_role_mapper.rb +2 -11
- data/lib/legion/rbac/settings.rb +3 -0
- data/lib/legion/rbac/version.rb +1 -1
- data/lib/legion/rbac.rb +3 -8
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 661aa1753cf4b4bc9ab854c5f0c3b70862718cb36ffab5ad395bb3f0b784ec18
|
|
4
|
+
data.tar.gz: 584b14c5cb4d084c160ef5b12015d15c06dbdea1f6eefa5a28b4d7a42237f818
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5f93ebba6bc19cad6876baa1124190689c09d3b3c053422f27eb8688c25216224d848aae90e313fc638a7caea07bd303f853a0d15a7ea84a8c1383e13e9a379e
|
|
7
|
+
data.tar.gz: 3c3f61943d75c2241797147091b313cf2355dea9d309227c2a62acf80126902b5186297a41bf02c14ee5cf10e6c7ab0676728e7e65ae138b83e1b2b404461170
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -8,13 +8,17 @@ on:
|
|
|
8
8
|
|
|
9
9
|
jobs:
|
|
10
10
|
ci:
|
|
11
|
-
uses: LegionIO/.github/.github/workflows/ci.yml@
|
|
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@
|
|
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
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
|
-
|
|
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
|
@@ -100,13 +100,11 @@ module Legion
|
|
|
100
100
|
end
|
|
101
101
|
|
|
102
102
|
def enabled?
|
|
103
|
-
|
|
104
|
-
settings[:enabled] != false
|
|
103
|
+
Legion::Settings[:rbac][:capability_audit][:enabled] != false
|
|
105
104
|
end
|
|
106
105
|
|
|
107
106
|
def mode
|
|
108
|
-
|
|
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
|
|
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 ||
|
|
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
|
data/lib/legion/rbac/settings.rb
CHANGED
|
@@ -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)
|
data/lib/legion/rbac/version.rb
CHANGED
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
|
-
|
|
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
|
-
|
|
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]
|
|
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.
|
|
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.
|
|
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.
|
|
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
|