cerbos 0.7.0 → 0.9.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 +27 -2
- data/README.md +2 -2
- data/cerbos.gemspec +2 -1
- data/lib/cerbos/client.rb +32 -15
- data/lib/cerbos/error.rb +2 -2
- data/lib/cerbos/input/principal.rb +20 -5
- data/lib/cerbos/input/resource.rb +20 -5
- data/lib/cerbos/input/resource_query.rb +20 -5
- data/lib/cerbos/protobuf/buf/validate/expression_pb.rb +17 -0
- data/lib/cerbos/protobuf/buf/validate/priv/private_pb.rb +22 -0
- data/lib/cerbos/protobuf/buf/validate/validate_pb.rb +45 -0
- data/lib/cerbos/protobuf/cerbos/effect/v1/effect_pb.rb +1 -22
- data/lib/cerbos/protobuf/cerbos/engine/v1/engine_pb.rb +2 -24
- data/lib/cerbos/protobuf/cerbos/request/v1/request_pb.rb +3 -26
- data/lib/cerbos/protobuf/cerbos/response/v1/response_pb.rb +2 -25
- data/lib/cerbos/protobuf/cerbos/schema/v1/schema_pb.rb +1 -22
- data/lib/cerbos/protobuf/cerbos/svc/v1/svc_pb.rb +3 -24
- data/lib/cerbos/protobuf/cerbos/svc/v1/svc_services_pb.rb +1 -1
- data/lib/cerbos/protobuf/google/api/annotations_pb.rb +1 -23
- data/lib/cerbos/protobuf/google/api/field_behavior_pb.rb +2 -23
- data/lib/cerbos/protobuf/google/api/http_pb.rb +1 -22
- data/lib/cerbos/protobuf/protoc-gen-openapiv2/options/annotations_pb.rb +1 -23
- data/lib/cerbos/protobuf/protoc-gen-openapiv2/options/openapiv2_pb.rb +1 -23
- data/lib/cerbos/version.rb +1 -1
- data/lib/cerbos.rb +11 -0
- metadata +28 -6
- data/lib/cerbos/protobuf/validate/validate_pb.rb +0 -65
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d1ba4a17419c03f18f05118b26ae2e829d3d2fbeb7548fea051604e3e5e99e42
|
4
|
+
data.tar.gz: 73cf8dbb7882ff2cc5fdf658670e3cf6783a480cb71d3eeb634c8f5b499dc789
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96a39b78eb78562136a31c343e37e6c4b570d04b9db4ba1817915b61f32047c24b32a34d3e24d770a15175d85254979c7baa7ec5fff012c59dd77b4fe2f872da
|
7
|
+
data.tar.gz: b68d5d6670f99314af88087b9a1b225e8fc35c9d0f788d8c17edaf4fc06fcf312cfa651a977210a33bc8e320d0493a1e998597f2fec58bdecee527e92fc379f8
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,27 @@
|
|
2
2
|
|
3
3
|
No notable changes.
|
4
4
|
|
5
|
+
## [0.9.0] - 2024-06-10
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
- Use `attr` for principal and resource attributes ([#157](https://github.com/cerbos/cerbos-sdk-ruby/pull/157))
|
10
|
+
|
11
|
+
This makes the API consistent with policy expressions.
|
12
|
+
`attributes` is still supported for backwards compatibility, but is now deprecated.
|
13
|
+
|
14
|
+
- Increased [`google-protobuf`] version requirement to 3.21.12+ to avoid [failure to load `protovalidate` extension field descriptors](https://github.com/protocolbuffers/upb/pull/1034) ([#159](https://github.com/cerbos/cerbos-sdk-ruby/pull/159))
|
15
|
+
|
16
|
+
### Removed
|
17
|
+
|
18
|
+
- Support for Ruby 3.0 ([#158](https://github.com/cerbos/cerbos-sdk-ruby/pull/158))
|
19
|
+
|
20
|
+
## [0.8.0] - 2024-01-12
|
21
|
+
|
22
|
+
### Added
|
23
|
+
|
24
|
+
- `grpc_metadata` option to `Cerbos::Client` constructor and request methods to add gRPC metadata (a.k.a. HTTP headers) to requests to the policy decision point ([#132](https://github.com/cerbos/cerbos-sdk-ruby/pull/132))
|
25
|
+
|
5
26
|
## [0.7.0] - 2023-06-07
|
6
27
|
|
7
28
|
### Added
|
@@ -60,7 +81,7 @@ No notable changes.
|
|
60
81
|
|
61
82
|
### Changed
|
62
83
|
|
63
|
-
- Increased `grpc` version requirement to 1.46+ to avoid [installing a native gem compiled for `x86_64-darwin` on `arm64-darwin`](https://github.com/grpc/grpc/issues/29100) ([#8](https://github.com/cerbos/cerbos-sdk-ruby/pull/8))
|
84
|
+
- Increased [`grpc`] version requirement to 1.46+ to avoid [installing a native gem compiled for `x86_64-darwin` on `arm64-darwin`](https://github.com/grpc/grpc/issues/29100) ([#8](https://github.com/cerbos/cerbos-sdk-ruby/pull/8))
|
64
85
|
|
65
86
|
## [0.1.0] - 2022-05-12
|
66
87
|
|
@@ -68,7 +89,9 @@ No notable changes.
|
|
68
89
|
|
69
90
|
- Initial implementation of `Cerbos::Client` ([#2](https://github.com/cerbos/cerbos-sdk-ruby/pull/2))
|
70
91
|
|
71
|
-
[Unreleased]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.
|
92
|
+
[Unreleased]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.9.0...HEAD
|
93
|
+
[0.9.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.8.0...v0.9.0
|
94
|
+
[0.8.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.7.0...v0.8.0
|
72
95
|
[0.7.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.6.1...v0.7.0
|
73
96
|
[0.6.1]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.6.0...v0.6.1
|
74
97
|
[0.6.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.5.0...v0.6.0
|
@@ -77,3 +100,5 @@ No notable changes.
|
|
77
100
|
[0.3.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.2.0...v0.3.0
|
78
101
|
[0.2.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/v0.1.0...v0.2.0
|
79
102
|
[0.1.0]: https://github.com/cerbos/cerbos-sdk-ruby/compare/4481009e9dec2e1e6a2df8ea2f828690ceabbefc...v0.1.0
|
103
|
+
[`google-protobuf`]: https://rubygems.org/gems/google-protobuf
|
104
|
+
[`grpc`]: https://rubygems.org/gems/grpc
|
data/README.md
CHANGED
@@ -12,7 +12,7 @@ The Cerbos Ruby SDK makes it easy to interact with the Cerbos PDP from your Ruby
|
|
12
12
|
## Prerequisites
|
13
13
|
|
14
14
|
- Cerbos 0.16+
|
15
|
-
- Ruby 3.
|
15
|
+
- Ruby 3.1+
|
16
16
|
|
17
17
|
## Installation
|
18
18
|
|
@@ -41,7 +41,7 @@ decision = client.check_resource(
|
|
41
41
|
resource: {
|
42
42
|
kind: "document",
|
43
43
|
id: "1",
|
44
|
-
|
44
|
+
attr: {
|
45
45
|
owner: "author@example.com"
|
46
46
|
}
|
47
47
|
},
|
data/cerbos.gemspec
CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
"yard_extensions.rb"
|
32
32
|
]
|
33
33
|
|
34
|
-
spec.required_ruby_version = ">= 3.
|
34
|
+
spec.required_ruby_version = ">= 3.1.0"
|
35
35
|
spec.add_dependency "grpc", "~> 1.46"
|
36
|
+
spec.add_dependency "google-protobuf", [">= 3.21.12", "< 4.0"]
|
36
37
|
end
|
data/lib/cerbos/client.rb
CHANGED
@@ -4,14 +4,22 @@ module Cerbos
|
|
4
4
|
# A client for interacting with the Cerbos policy decision point (PDP) server over gRPC.
|
5
5
|
#
|
6
6
|
# An instance of the client may be shared between threads.
|
7
|
-
#
|
8
|
-
#
|
7
|
+
#
|
8
|
+
# Due to [a limitation in the underlying `grpc` gem](https://github.com/grpc/grpc/issues/8798), creating a client instance before a process fork is [only (experimentally) supported on Linux](https://github.com/grpc/grpc/pull/33430) and requires you to
|
9
|
+
# - have at least v1.57.0 of the `grpc` gem installed,
|
10
|
+
# - set the `GRPC_ENABLE_FORK_SUPPORT` environment variable to `1`,
|
11
|
+
# - call `GRPC.prefork` before forking,
|
12
|
+
# - call `GRPC.postfork_parent` in the parent process after forking, and
|
13
|
+
# - call `GRPC.postfork_child` in the child processes after forking.
|
14
|
+
#
|
15
|
+
# Otherwise, if your application runs on a forking webserver (for example, Puma in clustered mode), then you'll need to ensure that you only create client instances in the child (worker) processes.
|
9
16
|
class Client
|
10
17
|
# Create a client for interacting with the Cerbos PDP server over gRPC.
|
11
18
|
#
|
12
19
|
# @param target [String] Cerbos PDP server address (`"host"`, `"host:port"`, or `"unix:/path/to/socket"`).
|
13
20
|
# @param tls [TLS, MutualTLS, false] gRPC connection encryption settings (`false` for plaintext).
|
14
21
|
# @param grpc_channel_args [Hash{String, Symbol => String, Integer}] low-level settings for the gRPC channel (see [available keys in the gRPC documentation](https://grpc.github.io/grpc/core/group__grpc__arg__keys.html)).
|
22
|
+
# @param grpc_metadata [Hash{String, Symbol => String, Array<String>}] gRPC metadata (a.k.a. HTTP headers) to add to every request to the PDP.
|
15
23
|
# @param on_validation_error [:return, :raise, #call] action to take when input fails schema validation (`:return` to return the validation errors in the response, `:raise` to raise {Error::ValidationFailed}, or a callback to invoke).
|
16
24
|
# @param playground_instance [String, nil] identifier of the playground instance to use when prototyping against the hosted demo PDP.
|
17
25
|
# @param timeout [Numeric, nil] timeout for gRPC calls, in seconds (`nil` to never time out).
|
@@ -30,7 +38,8 @@ module Cerbos
|
|
30
38
|
#
|
31
39
|
# @example Invoke a callback when input fails schema validation
|
32
40
|
# client = Cerbos::Client.new("localhost:3593", tls: false, on_validation_error: ->(validation_errors) { do_something_with validation_errors })
|
33
|
-
def initialize(target, tls:, grpc_channel_args: {}, on_validation_error: :return, playground_instance: nil, timeout: nil)
|
41
|
+
def initialize(target, tls:, grpc_channel_args: {}, grpc_metadata: {}, on_validation_error: :return, playground_instance: nil, timeout: nil)
|
42
|
+
@grpc_metadata = grpc_metadata.transform_keys(&:to_sym)
|
34
43
|
@on_validation_error = on_validation_error
|
35
44
|
|
36
45
|
handle_errors do
|
@@ -60,6 +69,7 @@ module Cerbos
|
|
60
69
|
# @param action [String] the action to check.
|
61
70
|
# @param aux_data [Input::AuxData, Hash, nil] auxiliary data.
|
62
71
|
# @param request_id [String] identifier for tracing the request.
|
72
|
+
# @param grpc_metadata [Hash{String, Symbol => String, Array<String>}] gRPC metadata (a.k.a. HTTP headers) to add to the request.
|
63
73
|
#
|
64
74
|
# @return [Boolean]
|
65
75
|
#
|
@@ -69,13 +79,14 @@ module Cerbos
|
|
69
79
|
# resource: {kind: "document", id: "1"},
|
70
80
|
# action: "view"
|
71
81
|
# ) # => true
|
72
|
-
def allow?(principal:, resource:, action:, aux_data: nil, request_id: SecureRandom.uuid)
|
82
|
+
def allow?(principal:, resource:, action:, aux_data: nil, request_id: SecureRandom.uuid, grpc_metadata: {})
|
73
83
|
check_resource(
|
74
84
|
principal: principal,
|
75
85
|
resource: resource,
|
76
86
|
actions: [action],
|
77
87
|
aux_data: aux_data,
|
78
|
-
request_id: request_id
|
88
|
+
request_id: request_id,
|
89
|
+
grpc_metadata: grpc_metadata
|
79
90
|
).allow?(action)
|
80
91
|
end
|
81
92
|
|
@@ -87,6 +98,7 @@ module Cerbos
|
|
87
98
|
# @param aux_data [Input::AuxData, Hash, nil] auxiliary data.
|
88
99
|
# @param include_metadata [Boolean] `true` to include additional metadata ({Output::CheckResources::Result::Metadata}) in the results.
|
89
100
|
# @param request_id [String] identifier for tracing the request.
|
101
|
+
# @param grpc_metadata [Hash{String, Symbol => String, Array<String>}] gRPC metadata (a.k.a. HTTP headers) to add to the request.
|
90
102
|
#
|
91
103
|
# @return [Output::CheckResources::Result]
|
92
104
|
#
|
@@ -98,14 +110,15 @@ module Cerbos
|
|
98
110
|
# )
|
99
111
|
#
|
100
112
|
# decision.allow?("view") # => true
|
101
|
-
def check_resource(principal:, resource:, actions:, aux_data: nil, include_metadata: false, request_id: SecureRandom.uuid)
|
113
|
+
def check_resource(principal:, resource:, actions:, aux_data: nil, include_metadata: false, request_id: SecureRandom.uuid, grpc_metadata: {})
|
102
114
|
handle_errors do
|
103
115
|
check_resources(
|
104
116
|
principal: principal,
|
105
117
|
resources: [Input::ResourceCheck.new(resource: resource, actions: actions)],
|
106
118
|
aux_data: aux_data,
|
107
119
|
include_metadata: include_metadata,
|
108
|
-
request_id: request_id
|
120
|
+
request_id: request_id,
|
121
|
+
grpc_metadata: grpc_metadata
|
109
122
|
).find_result(resource)
|
110
123
|
end
|
111
124
|
end
|
@@ -117,6 +130,7 @@ module Cerbos
|
|
117
130
|
# @param aux_data [Input::AuxData, Hash, nil] auxiliary data.
|
118
131
|
# @param include_metadata [Boolean] `true` to include additional metadata ({Output::CheckResources::Result::Metadata}) in the results.
|
119
132
|
# @param request_id [String] identifier for tracing the request.
|
133
|
+
# @param grpc_metadata [Hash{String, Symbol => String, Array<String>}] gRPC metadata (a.k.a. HTTP headers) to add to the request.
|
120
134
|
#
|
121
135
|
# @return [Output::CheckResources]
|
122
136
|
#
|
@@ -136,7 +150,7 @@ module Cerbos
|
|
136
150
|
# )
|
137
151
|
#
|
138
152
|
# decision.allow?(resource: {kind: "document", id: "1"}, action: "view") # => true
|
139
|
-
def check_resources(principal:, resources:, aux_data: nil, include_metadata: false, request_id: SecureRandom.uuid)
|
153
|
+
def check_resources(principal:, resources:, aux_data: nil, include_metadata: false, request_id: SecureRandom.uuid, grpc_metadata: {})
|
140
154
|
handle_errors do
|
141
155
|
request = Protobuf::Cerbos::Request::V1::CheckResourcesRequest.new(
|
142
156
|
principal: Input.coerce_required(principal, Input::Principal).to_protobuf,
|
@@ -146,7 +160,7 @@ module Cerbos
|
|
146
160
|
request_id: request_id
|
147
161
|
)
|
148
162
|
|
149
|
-
response = perform_request(@cerbos_service, :check_resources, request)
|
163
|
+
response = perform_request(@cerbos_service, :check_resources, request, grpc_metadata)
|
150
164
|
|
151
165
|
Output::CheckResources.from_protobuf(response).tap do |output|
|
152
166
|
handle_validation_errors output
|
@@ -162,6 +176,7 @@ module Cerbos
|
|
162
176
|
# @param aux_data [Input::AuxData, Hash, nil] auxiliary data.
|
163
177
|
# @param include_metadata [Boolean] `true` to include additional metadata ({Output::CheckResources::Result::Metadata}) in the results.
|
164
178
|
# @param request_id [String] identifier for tracing the request.
|
179
|
+
# @param grpc_metadata [Hash{String, Symbol => String, Array<String>}] gRPC metadata (a.k.a. HTTP headers) to add to the request.
|
165
180
|
#
|
166
181
|
# @return [Output::PlanResources]
|
167
182
|
#
|
@@ -174,7 +189,7 @@ module Cerbos
|
|
174
189
|
#
|
175
190
|
# plan.conditional? # => true
|
176
191
|
# plan.condition # => #<Cerbos::Output::PlanResources::Expression ...>
|
177
|
-
def plan_resources(principal:, resource:, action:, aux_data: nil, include_metadata: false, request_id: SecureRandom.uuid)
|
192
|
+
def plan_resources(principal:, resource:, action:, aux_data: nil, include_metadata: false, request_id: SecureRandom.uuid, grpc_metadata: {})
|
178
193
|
handle_errors do
|
179
194
|
request = Protobuf::Cerbos::Request::V1::PlanResourcesRequest.new(
|
180
195
|
principal: Input.coerce_required(principal, Input::Principal).to_protobuf,
|
@@ -185,7 +200,7 @@ module Cerbos
|
|
185
200
|
request_id: request_id
|
186
201
|
)
|
187
202
|
|
188
|
-
response = perform_request(@cerbos_service, :plan_resources, request)
|
203
|
+
response = perform_request(@cerbos_service, :plan_resources, request, grpc_metadata)
|
189
204
|
|
190
205
|
Output::PlanResources.from_protobuf(response).tap do |output|
|
191
206
|
handle_validation_errors output
|
@@ -195,12 +210,14 @@ module Cerbos
|
|
195
210
|
|
196
211
|
# Retrieve information about the Cerbos PDP server.
|
197
212
|
#
|
213
|
+
# @param grpc_metadata [Hash{String, Symbol => String, Array<String>}] gRPC metadata (a.k.a. HTTP headers) to add to the request.
|
214
|
+
#
|
198
215
|
# @return [Output::ServerInfo]
|
199
|
-
def server_info
|
216
|
+
def server_info(grpc_metadata: {})
|
200
217
|
handle_errors do
|
201
218
|
request = Protobuf::Cerbos::Request::V1::ServerInfoRequest.new
|
202
219
|
|
203
|
-
response = perform_request(@cerbos_service, :server_info, request)
|
220
|
+
response = perform_request(@cerbos_service, :server_info, request, grpc_metadata)
|
204
221
|
|
205
222
|
Output::ServerInfo.from_protobuf(response)
|
206
223
|
end
|
@@ -231,8 +248,8 @@ module Cerbos
|
|
231
248
|
@on_validation_error.call validation_errors
|
232
249
|
end
|
233
250
|
|
234
|
-
def perform_request(service, rpc, request)
|
235
|
-
service.public_send(rpc, request)
|
251
|
+
def perform_request(service, rpc, request, metadata)
|
252
|
+
service.public_send(rpc, request, metadata: @grpc_metadata.merge(metadata.transform_keys(&:to_sym)))
|
236
253
|
end
|
237
254
|
end
|
238
255
|
end
|
data/lib/cerbos/error.rb
CHANGED
@@ -12,7 +12,7 @@ module Cerbos
|
|
12
12
|
|
13
13
|
# @private
|
14
14
|
def initialize(validation_errors)
|
15
|
-
super
|
15
|
+
super("Input failed schema validation")
|
16
16
|
|
17
17
|
@validation_errors = validation_errors
|
18
18
|
end
|
@@ -48,7 +48,7 @@ module Cerbos
|
|
48
48
|
|
49
49
|
# @private
|
50
50
|
def initialize(code:, details:, metadata: {})
|
51
|
-
super
|
51
|
+
super("gRPC error #{code}: #{details}")
|
52
52
|
|
53
53
|
@code = code
|
54
54
|
@details = details
|
@@ -17,7 +17,7 @@ module Cerbos
|
|
17
17
|
# Application-specific attributes describing the principal.
|
18
18
|
#
|
19
19
|
# @return [Attributes]
|
20
|
-
attr_reader :
|
20
|
+
attr_reader :attr
|
21
21
|
|
22
22
|
# The policy version to use when authorizing the principal.
|
23
23
|
#
|
@@ -37,23 +37,38 @@ module Cerbos
|
|
37
37
|
#
|
38
38
|
# @param id [String] a unique identifier for the principal.
|
39
39
|
# @param roles [Array<String>] the roles held by the principal.
|
40
|
-
# @param
|
40
|
+
# @param attr [Attributes, Hash] application-specific attributes describing the principal.
|
41
|
+
# @param attributes [Attributes, Hash] deprecated (use `attr` instead).
|
41
42
|
# @param policy_version [String, nil] the policy version to use when authorizing the principal (`nil` to use the Cerbos policy decision point server's configured default version).
|
42
43
|
# @param scope [String, nil] the policy scope to use when authorizing the principal.
|
43
|
-
def initialize(id:, roles:,
|
44
|
+
def initialize(id:, roles:, attr: {}, attributes: nil, policy_version: nil, scope: nil)
|
45
|
+
unless attributes.nil?
|
46
|
+
Cerbos.deprecation_warning "The `attributes` keyword argument is deprecated. Use `attr` instead."
|
47
|
+
attr = attributes
|
48
|
+
end
|
49
|
+
|
44
50
|
@id = id
|
45
51
|
@roles = roles
|
46
|
-
@
|
52
|
+
@attr = Input.coerce_required(attr, Attributes)
|
47
53
|
@policy_version = policy_version
|
48
54
|
@scope = scope
|
49
55
|
end
|
50
56
|
|
57
|
+
# Application-specific attributes describing the principal.
|
58
|
+
#
|
59
|
+
# @deprecated Use {#attr} instead.
|
60
|
+
# @return [Attributes]
|
61
|
+
def attributes
|
62
|
+
Cerbos.deprecation_warning "The `attributes` method is deprecated. Use `attr` instead."
|
63
|
+
attr
|
64
|
+
end
|
65
|
+
|
51
66
|
# @private
|
52
67
|
def to_protobuf
|
53
68
|
Protobuf::Cerbos::Engine::V1::Principal.new(
|
54
69
|
id: id,
|
55
70
|
roles: roles,
|
56
|
-
attr:
|
71
|
+
attr: attr.to_protobuf,
|
57
72
|
policy_version: policy_version,
|
58
73
|
scope: scope
|
59
74
|
)
|
@@ -17,7 +17,7 @@ module Cerbos
|
|
17
17
|
# Application-specific attributes describing the resource.
|
18
18
|
#
|
19
19
|
# @return [Attributes]
|
20
|
-
attr_reader :
|
20
|
+
attr_reader :attr
|
21
21
|
|
22
22
|
# The policy version to use when checking the principal's permissions on the resource.
|
23
23
|
#
|
@@ -37,23 +37,38 @@ module Cerbos
|
|
37
37
|
#
|
38
38
|
# @param kind [String] the type of resource.
|
39
39
|
# @param id [String] a unique identifier for the resource.
|
40
|
-
# @param
|
40
|
+
# @param attr [Attributes, Hash] application-specific attributes describing the resource.
|
41
|
+
# @param attributes [Attributes, Hash] deprecated (use `attr` instead).
|
41
42
|
# @param policy_version [String, nil] the policy version to use when checking the principal's permissions on the resource (`nil` to use the Cerbos policy decision point server's configured default version).
|
42
43
|
# @param scope [String, nil] the policy scope to use when checking the principal's permissions on the resource.
|
43
|
-
def initialize(kind:, id:,
|
44
|
+
def initialize(kind:, id:, attr: {}, attributes: nil, policy_version: nil, scope: nil)
|
45
|
+
unless attributes.nil?
|
46
|
+
Cerbos.deprecation_warning "The `attributes` keyword argument is deprecated. Use `attr` instead."
|
47
|
+
attr = attributes
|
48
|
+
end
|
49
|
+
|
44
50
|
@kind = kind
|
45
51
|
@id = id
|
46
|
-
@
|
52
|
+
@attr = Input.coerce_required(attr, Attributes)
|
47
53
|
@policy_version = policy_version
|
48
54
|
@scope = scope
|
49
55
|
end
|
50
56
|
|
57
|
+
# Application-specific attributes describing the resource.
|
58
|
+
#
|
59
|
+
# @deprecated Use {#attr} instead.
|
60
|
+
# @return [Attributes]
|
61
|
+
def attributes
|
62
|
+
Cerbos.deprecation_warning "The `attributes` method is deprecated. Use `attr` instead."
|
63
|
+
attr
|
64
|
+
end
|
65
|
+
|
51
66
|
# @private
|
52
67
|
def to_protobuf
|
53
68
|
Protobuf::Cerbos::Engine::V1::Resource.new(
|
54
69
|
kind: kind,
|
55
70
|
id: id,
|
56
|
-
attr:
|
71
|
+
attr: attr.to_protobuf,
|
57
72
|
policy_version: policy_version,
|
58
73
|
scope: scope
|
59
74
|
)
|
@@ -12,7 +12,7 @@ module Cerbos
|
|
12
12
|
# Any application-specific attributes describing the resources to be queried that are known in advance.
|
13
13
|
#
|
14
14
|
# @return [Attributes]
|
15
|
-
attr_reader :
|
15
|
+
attr_reader :attr
|
16
16
|
|
17
17
|
# The policy version to use when planning the query.
|
18
18
|
#
|
@@ -31,21 +31,36 @@ module Cerbos
|
|
31
31
|
# Specify partial details of resources to be queried.
|
32
32
|
#
|
33
33
|
# @param kind [String] the type of resources to be queried.
|
34
|
-
# @param
|
34
|
+
# @param attr [Attributes, Hash] any application-specific attributes describing the resources to be queried that are known in advance.
|
35
|
+
# @param attributes [Attributes, Hash] deprecated (use `attr` instead).
|
35
36
|
# @param policy_version [String, nil] the policy version to use when planning the query (`nil` to use the Cerbos policy decision point server's configured default version).
|
36
37
|
# @param scope [String, nil] the policy scope to use when planning the query.
|
37
|
-
def initialize(kind:,
|
38
|
+
def initialize(kind:, attr: {}, attributes: nil, policy_version: nil, scope: nil)
|
39
|
+
unless attributes.nil?
|
40
|
+
Cerbos.deprecation_warning "The `attributes` keyword argument is deprecated. Use `attr` instead."
|
41
|
+
attr = attributes
|
42
|
+
end
|
43
|
+
|
38
44
|
@kind = kind
|
39
|
-
@
|
45
|
+
@attr = Input.coerce_required(attr, Attributes)
|
40
46
|
@policy_version = policy_version
|
41
47
|
@scope = scope
|
42
48
|
end
|
43
49
|
|
50
|
+
# Any application-specific attributes describing the resources to be queried that are known in advance.
|
51
|
+
#
|
52
|
+
# @deprecated Use {#attr} instead.
|
53
|
+
# @return [Attributes]
|
54
|
+
def attributes
|
55
|
+
Cerbos.deprecation_warning "The `attributes` method is deprecated. Use `attr` instead."
|
56
|
+
attr
|
57
|
+
end
|
58
|
+
|
44
59
|
# @private
|
45
60
|
def to_protobuf
|
46
61
|
Protobuf::Cerbos::Engine::V1::PlanResourcesInput::Resource.new(
|
47
62
|
kind: kind,
|
48
|
-
attr:
|
63
|
+
attr: attr.to_protobuf,
|
49
64
|
policy_version: policy_version,
|
50
65
|
scope: scope
|
51
66
|
)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# source: buf/validate/expression.proto
|
4
|
+
|
5
|
+
require 'google/protobuf'
|
6
|
+
|
7
|
+
|
8
|
+
descriptor_data = "\n\x1d\x62uf/validate/expression.proto\x12\x0c\x62uf.validate\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpressionBp\n\x12\x62uild.buf.validateB\x0f\x45xpressionProtoP\x01ZGbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validateb\x06proto3"
|
9
|
+
|
10
|
+
pool = Google::Protobuf::DescriptorPool.generated_pool
|
11
|
+
pool.add_serialized_file(descriptor_data)
|
12
|
+
|
13
|
+
module Cerbos::Protobuf::Buf
|
14
|
+
module Validate
|
15
|
+
Constraint = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("buf.validate.Constraint").msgclass
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
3
|
+
# source: buf/validate/priv/private.proto
|
4
|
+
|
5
|
+
require 'google/protobuf'
|
6
|
+
|
7
|
+
require 'google/protobuf/descriptor_pb'
|
8
|
+
|
9
|
+
|
10
|
+
descriptor_data = "\n\x1f\x62uf/validate/priv/private.proto\x12\x11\x62uf.validate.priv\x1a google/protobuf/descriptor.proto\"C\n\x10\x46ieldConstraints\x12/\n\x03\x63\x65l\x18\x01 \x03(\x0b\x32\x1d.buf.validate.priv.ConstraintR\x03\x63\x65l\"V\n\nConstraint\x12\x0e\n\x02id\x18\x01 \x01(\tR\x02id\x12\x18\n\x07message\x18\x02 \x01(\tR\x07message\x12\x1e\n\nexpression\x18\x03 \x01(\tR\nexpression:\\\n\x05\x66ield\x12\x1d.google.protobuf.FieldOptions\x18\x88\t \x01(\x0b\x32#.buf.validate.priv.FieldConstraintsR\x05\x66ield\x88\x01\x01\x42w\n\x17\x62uild.buf.validate.privB\x0cPrivateProtoP\x01ZLbuf.build/gen/go/bufbuild/protovalidate/protocolbuffers/go/buf/validate/privb\x06proto3"
|
11
|
+
|
12
|
+
pool = Google::Protobuf::DescriptorPool.generated_pool
|
13
|
+
pool.add_serialized_file(descriptor_data)
|
14
|
+
|
15
|
+
module Cerbos::Protobuf::Buf
|
16
|
+
module Validate
|
17
|
+
module Priv
|
18
|
+
FieldConstraints = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("buf.validate.priv.FieldConstraints").msgclass
|
19
|
+
Constraint = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("buf.validate.priv.Constraint").msgclass
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|