cerbos 0.5.0 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -1
- data/lib/cerbos/client.rb +4 -2
- data/lib/cerbos/output/check_resources.rb +18 -41
- data/lib/cerbos/output/plan_resources.rb +7 -1
- data/lib/cerbos/output/validation_error.rb +45 -0
- data/lib/cerbos/output.rb +1 -0
- data/lib/cerbos/protobuf/cerbos/engine/v1/engine_pb.rb +1 -0
- data/lib/cerbos/protobuf/cerbos/response/v1/response_pb.rb +1 -0
- data/lib/cerbos/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e21f0359fb0e125e0e3a6d4ecf9ac0c12e254ab464b4ad67e8d6213fd2974ed5
|
4
|
+
data.tar.gz: a959dfdc08af3b960b58cd78c953925fba3b88b5db915bb30f94d3f32b810cb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7e89b9ec5168b7215d9b9c1ad86ed8a34404f3cd3db2b6bf44889b319fc3ab5520d2ea5eb74f22e99d955e544cfb43ca925dc597763c8ae782a645ee5b086c4b
|
7
|
+
data.tar.gz: e7ddf0d6071cd1ac4f607617b95e0987d11d72d34feeda6742d034f2ff212ca01dd0ef57abb94e2d54e578cd5bd5929e0ff2dab3844835cad557b9b9b062b10e
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
No notable changes.
|
3
3
|
|
4
|
+
## [0.6.0] - 2022-07-01
|
5
|
+
### Added
|
6
|
+
- Support for schema validation in `Cerbos::Client#plan_resources` ([#32](https://github.com/cerbos/cerbos-sdk-ruby/pull/32))
|
7
|
+
|
8
|
+
Requires Cerbos 0.19+.
|
9
|
+
`Cerbos::Output::PlanResources#validation_errors` will always return an empty array if the client is connected to an earlier version of Cerbos.
|
10
|
+
|
11
|
+
As a result, `Cerbos::Output::CheckResources::Result::ValidationError` has moved to `Cerbos::Output::ValidationError`.
|
12
|
+
Attempting to access the class via the old namespace will print a deprecation warning and return the new class.
|
13
|
+
|
4
14
|
## [0.5.0] - 2022-06-09
|
5
15
|
### Added
|
6
16
|
- Allow symbol keys in nested attributes hashes ([#28](https://github.com/cerbos/cerbos-sdk-ruby/pull/28))
|
@@ -26,7 +36,8 @@ No notable changes.
|
|
26
36
|
### Added
|
27
37
|
- Initial implementation of `Cerbos::Client` ([#2](https://github.com/cerbos/cerbos-sdk-ruby/pull/2))
|
28
38
|
|
29
|
-
[Unreleased]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.
|
39
|
+
[Unreleased]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.6.0...HEAD
|
40
|
+
[0.6.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.5.0...v0.6.0
|
30
41
|
[0.5.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.4.0...v0.5.0
|
31
42
|
[0.4.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.3.0...v0.4.0
|
32
43
|
[0.3.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.2.0...v0.3.0
|
data/lib/cerbos/client.rb
CHANGED
@@ -187,7 +187,9 @@ module Cerbos
|
|
187
187
|
|
188
188
|
response = perform_request(@cerbos_service, :plan_resources, request)
|
189
189
|
|
190
|
-
Output::PlanResources.from_protobuf(response)
|
190
|
+
Output::PlanResources.from_protobuf(response).tap do |output|
|
191
|
+
handle_validation_errors output
|
192
|
+
end
|
191
193
|
end
|
192
194
|
end
|
193
195
|
|
@@ -221,7 +223,7 @@ module Cerbos
|
|
221
223
|
def handle_validation_errors(output)
|
222
224
|
return if @on_validation_error == :return
|
223
225
|
|
224
|
-
validation_errors = output.
|
226
|
+
validation_errors = output.validation_errors
|
225
227
|
return if validation_errors.empty?
|
226
228
|
|
227
229
|
raise Error::ValidationFailed.new(validation_errors) if @on_validation_error == :raise
|
@@ -55,6 +55,13 @@ module Cerbos
|
|
55
55
|
results.find { |result| matching_resource?(search, result.resource) }
|
56
56
|
end
|
57
57
|
|
58
|
+
# List unique schema validation errors for the principal or resource attributes.
|
59
|
+
#
|
60
|
+
# @return [Array<ValidationError>]
|
61
|
+
def validation_errors
|
62
|
+
results.flat_map(&:validation_errors).uniq
|
63
|
+
end
|
64
|
+
|
58
65
|
private
|
59
66
|
|
60
67
|
def matching_resource?(search, candidate)
|
@@ -88,11 +95,21 @@ module Cerbos
|
|
88
95
|
# @return [Metadata]
|
89
96
|
# @return [nil] if `include_metadata` was `false`.
|
90
97
|
|
98
|
+
# @private
|
99
|
+
def self.const_missing(const)
|
100
|
+
if const == :ValidationError
|
101
|
+
warn "#{name}::ValidationError is deprecated; use #{ValidationError.name} instead (called from #{caller(1..1).first})"
|
102
|
+
return ValidationError
|
103
|
+
end
|
104
|
+
|
105
|
+
super
|
106
|
+
end
|
107
|
+
|
91
108
|
def self.from_protobuf(entry)
|
92
109
|
new(
|
93
110
|
resource: CheckResources::Result::Resource.from_protobuf(entry.resource),
|
94
111
|
actions: entry.actions.to_h,
|
95
|
-
validation_errors: (entry.validation_errors || []).map { |validation_error|
|
112
|
+
validation_errors: (entry.validation_errors || []).map { |validation_error| ValidationError.from_protobuf(validation_error) },
|
96
113
|
metadata: CheckResources::Result::Metadata.from_protobuf(entry.meta)
|
97
114
|
)
|
98
115
|
end
|
@@ -154,46 +171,6 @@ module Cerbos
|
|
154
171
|
end
|
155
172
|
end
|
156
173
|
|
157
|
-
# An error that occurred while validating the principal or resource attributes against a schema.
|
158
|
-
CheckResources::Result::ValidationError = Output.new_class(:path, :message, :source) do
|
159
|
-
# @!attribute [r] path
|
160
|
-
# The path to the attribute that failed validation.
|
161
|
-
#
|
162
|
-
# @return [String]
|
163
|
-
|
164
|
-
# @!attribute [r] message
|
165
|
-
# The error message.
|
166
|
-
#
|
167
|
-
# @return [String]
|
168
|
-
|
169
|
-
# @!attribute [r] source
|
170
|
-
# The source of the invalid attributes.
|
171
|
-
#
|
172
|
-
# @return [:SOURCE_PRINCIPAL, :SOURCE_RESOURCE]
|
173
|
-
|
174
|
-
def self.from_protobuf(validation_error)
|
175
|
-
new(
|
176
|
-
path: validation_error.path,
|
177
|
-
message: validation_error.message,
|
178
|
-
source: validation_error.source
|
179
|
-
)
|
180
|
-
end
|
181
|
-
|
182
|
-
# Check if the principal's attributes failed schema validation.
|
183
|
-
#
|
184
|
-
# @return [Boolean]
|
185
|
-
def from_principal?
|
186
|
-
source == :SOURCE_PRINCIPAL
|
187
|
-
end
|
188
|
-
|
189
|
-
# Check if the resource's attributes failed schema validation.
|
190
|
-
#
|
191
|
-
# @return [Boolean]
|
192
|
-
def from_resource?
|
193
|
-
source == :SOURCE_RESOURCE
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
174
|
# Additional information about how policy decisions were reached.
|
198
175
|
CheckResources::Result::Metadata = Output.new_class(:actions, :effective_derived_roles) do
|
199
176
|
# @!attribute [r] actions
|
@@ -5,7 +5,7 @@ module Cerbos
|
|
5
5
|
# A query plan that can be used to obtain a list of resources on which a principal is allowed to perform a particular action.
|
6
6
|
#
|
7
7
|
# @see Client#plan_resources
|
8
|
-
PlanResources = Output.new_class(:request_id, :kind, :condition, :metadata) do
|
8
|
+
PlanResources = Output.new_class(:request_id, :kind, :condition, :validation_errors, :metadata) do
|
9
9
|
# @!attribute [r] request_id
|
10
10
|
# The identifier for tracing the request.
|
11
11
|
#
|
@@ -26,6 +26,11 @@ module Cerbos
|
|
26
26
|
# @see #always_denied?
|
27
27
|
# @see #conditional?
|
28
28
|
|
29
|
+
# @!attribute [r] validation_errors
|
30
|
+
# Any schema validation errors for the principal or resource attributes.
|
31
|
+
#
|
32
|
+
# @return [Array<ValidationError>]
|
33
|
+
|
29
34
|
# @!attribute [r] metadata
|
30
35
|
# Additional information about the query plan.
|
31
36
|
#
|
@@ -37,6 +42,7 @@ module Cerbos
|
|
37
42
|
request_id: plan_resources.request_id,
|
38
43
|
kind: plan_resources.filter.kind,
|
39
44
|
condition: PlanResources::Expression::Operand.from_protobuf(plan_resources.filter.condition),
|
45
|
+
validation_errors: (plan_resources.validation_errors || []).map { |validation_error| ValidationError.from_protobuf(validation_error) },
|
40
46
|
metadata: PlanResources::Metadata.from_protobuf(plan_resources.meta)
|
41
47
|
)
|
42
48
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Cerbos
|
4
|
+
module Output
|
5
|
+
# An error that occurred while validating the principal or resource attributes against a schema.
|
6
|
+
ValidationError = Output.new_class(:path, :message, :source) do
|
7
|
+
# @!attribute [r] path
|
8
|
+
# The path to the attribute that failed validation.
|
9
|
+
#
|
10
|
+
# @return [String]
|
11
|
+
|
12
|
+
# @!attribute [r] message
|
13
|
+
# The error message.
|
14
|
+
#
|
15
|
+
# @return [String]
|
16
|
+
|
17
|
+
# @!attribute [r] source
|
18
|
+
# The source of the invalid attributes.
|
19
|
+
#
|
20
|
+
# @return [:SOURCE_PRINCIPAL, :SOURCE_RESOURCE]
|
21
|
+
|
22
|
+
def self.from_protobuf(validation_error)
|
23
|
+
new(
|
24
|
+
path: validation_error.path,
|
25
|
+
message: validation_error.message,
|
26
|
+
source: validation_error.source
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Check if the principal's attributes failed schema validation.
|
31
|
+
#
|
32
|
+
# @return [Boolean]
|
33
|
+
def from_principal?
|
34
|
+
source == :SOURCE_PRINCIPAL
|
35
|
+
end
|
36
|
+
|
37
|
+
# Check if the resource's attributes failed schema validation.
|
38
|
+
#
|
39
|
+
# @return [Boolean]
|
40
|
+
def from_resource?
|
41
|
+
source == :SOURCE_RESOURCE
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/cerbos/output.rb
CHANGED
@@ -75,6 +75,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
75
75
|
optional :scope, :string, 5, json_name: "scope"
|
76
76
|
optional :filter, :message, 6, "cerbos.engine.v1.PlanResourcesFilter", json_name: "filter"
|
77
77
|
optional :filter_debug, :string, 7, json_name: "filterDebug"
|
78
|
+
repeated :validation_errors, :message, 8, "cerbos.schema.v1.ValidationError", json_name: "validationErrors"
|
78
79
|
end
|
79
80
|
add_message "cerbos.engine.v1.CheckInput" do
|
80
81
|
optional :request_id, :string, 1, json_name: "requestId"
|
@@ -20,6 +20,7 @@ Google::Protobuf::DescriptorPool.generated_pool.build do
|
|
20
20
|
optional :policy_version, :string, 4, json_name: "policyVersion"
|
21
21
|
optional :filter, :message, 5, "cerbos.engine.v1.PlanResourcesFilter", json_name: "filter"
|
22
22
|
optional :meta, :message, 6, "cerbos.response.v1.PlanResourcesResponse.Meta", json_name: "meta"
|
23
|
+
repeated :validation_errors, :message, 7, "cerbos.schema.v1.ValidationError", json_name: "validationErrors"
|
23
24
|
end
|
24
25
|
add_message "cerbos.response.v1.PlanResourcesResponse.Meta" do
|
25
26
|
optional :filter_debug, :string, 1, json_name: "filterDebug"
|
data/lib/cerbos/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cerbos
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cerbos
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grpc
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/cerbos/output/check_resources.rb
|
54
54
|
- lib/cerbos/output/plan_resources.rb
|
55
55
|
- lib/cerbos/output/server_info.rb
|
56
|
+
- lib/cerbos/output/validation_error.rb
|
56
57
|
- lib/cerbos/protobuf.rb
|
57
58
|
- lib/cerbos/protobuf/cerbos/audit/v1/audit_pb.rb
|
58
59
|
- lib/cerbos/protobuf/cerbos/effect/v1/effect_pb.rb
|
@@ -81,7 +82,7 @@ licenses:
|
|
81
82
|
metadata:
|
82
83
|
bug_tracker_uri: https://github.com/cerbos/cerbos-sdk-ruby/issues
|
83
84
|
changelog_uri: https://github.com/cerbos/cerbos-sdk-ruby/blob/main/CHANGELOG.md
|
84
|
-
documentation_uri: https://www.rubydoc.info/gems/cerbos/0.
|
85
|
+
documentation_uri: https://www.rubydoc.info/gems/cerbos/0.6.0
|
85
86
|
homepage_uri: https://github.com/cerbos/cerbos-sdk-ruby
|
86
87
|
source_code_uri: https://github.com/cerbos/cerbos-sdk-ruby
|
87
88
|
rubygems_mfa_required: 'true'
|
@@ -100,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
101
|
- !ruby/object:Gem::Version
|
101
102
|
version: '0'
|
102
103
|
requirements: []
|
103
|
-
rubygems_version: 3.3.
|
104
|
+
rubygems_version: 3.3.17
|
104
105
|
signing_key:
|
105
106
|
specification_version: 4
|
106
107
|
summary: Client library for authorization via Cerbos
|