20 #include <type_traits>
23 #include "absl/memory/memory.h"
24 #include "absl/strings/str_format.h"
25 #include "absl/strings/str_join.h"
51 p.second.ToString()));
62 : address_prefix(
std::
move(address_prefix)), prefix_len(prefix_len) {}
65 : address_prefix(
std::move(other.address_prefix)),
66 prefix_len(other.prefix_len) {}
69 address_prefix =
std::move(other.address_prefix);
70 prefix_len = other.prefix_len;
76 address_prefix, prefix_len);
84 std::vector<std::unique_ptr<Permission>> permissions) {
92 std::vector<std::unique_ptr<Permission>> permissions) {
103 absl::make_unique<Rbac::Permission>(
std::move(permission)));
104 return not_permission;
146 permission.
invert = invert;
159 :
type(other.type), invert(other.invert) {
164 permissions =
std::move(other.permissions);
168 case RuleType::kHeader:
169 header_matcher =
std::move(other.header_matcher);
171 case RuleType::kPath:
172 case RuleType::kReqServerName:
173 string_matcher =
std::move(other.string_matcher);
175 case RuleType::kDestIp:
186 invert = other.invert;
191 permissions =
std::move(other.permissions);
195 case RuleType::kHeader:
196 header_matcher =
std::move(other.header_matcher);
198 case RuleType::kPath:
199 case RuleType::kReqServerName:
200 string_matcher =
std::move(other.string_matcher);
202 case RuleType::kDestIp:
213 case RuleType::kAnd: {
215 contents.reserve(permissions.size());
216 for (
const auto& permission : permissions) {
217 contents.push_back(permission->ToString());
221 case RuleType::kOr: {
223 contents.reserve(permissions.size());
224 for (
const auto& permission : permissions) {
225 contents.push_back(permission->ToString());
233 case RuleType::kHeader:
235 case RuleType::kPath:
237 case RuleType::kDestIp:
239 case RuleType::kDestPort:
241 case RuleType::kMetadata:
243 case RuleType::kReqServerName:
245 string_matcher.ToString());
256 std::vector<std::unique_ptr<Principal>> principals) {
264 std::vector<std::unique_ptr<Principal>> principals) {
275 absl::make_unique<Rbac::Principal>(
std::move(principal)));
276 return not_principal;
333 principal.
invert = invert;
338 :
type(other.type), invert(other.invert) {
343 principals =
std::move(other.principals);
347 case RuleType::kHeader:
348 header_matcher =
std::move(other.header_matcher);
350 case RuleType::kPrincipalName:
351 case RuleType::kPath:
352 string_matcher =
std::move(other.string_matcher);
361 invert = other.invert;
366 principals =
std::move(other.principals);
370 case RuleType::kHeader:
371 header_matcher =
std::move(other.header_matcher);
373 case RuleType::kPrincipalName:
374 case RuleType::kPath:
375 string_matcher =
std::move(other.string_matcher);
385 case RuleType::kAnd: {
387 contents.reserve(principals.size());
388 for (
const auto& principal : principals) {
389 contents.push_back(principal->ToString());
393 case RuleType::kOr: {
395 contents.reserve(principals.size());
396 for (
const auto& principal : principals) {
397 contents.push_back(principal->ToString());
405 case RuleType::kPrincipalName:
406 return absl::StrFormat(
"principal_name=%s", string_matcher->ToString());
407 case RuleType::kSourceIp:
409 case RuleType::kDirectRemoteIp:
411 case RuleType::kRemoteIp:
413 case RuleType::kHeader:
415 case RuleType::kPath:
417 case RuleType::kMetadata:
429 : permissions(
std::
move(permissions)), principals(
std::
move(principals)) {}
432 : permissions(
std::move(other.permissions)),
433 principals(
std::move(other.principals)) {}
436 permissions =
std::move(other.permissions);
437 principals =
std::move(other.principals);
443 " Policy {\n Permissions{%s}\n Principals{%s}\n }",
444 permissions.ToString(), principals.ToString());