cerbos 0.7.0 → 0.9.0
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/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
|