Skip to content

Commit

Permalink
feat: Add a proto message to describe the resource_type and `resour…
Browse files Browse the repository at this point in the history
…ce_permission` for an API method

PiperOrigin-RevId: 550688034
  • Loading branch information
Google APIs authored and Copybara-Service committed Jul 24, 2023
1 parent 2ad3b4c commit 52a738b
Show file tree
Hide file tree
Showing 3 changed files with 117 additions and 0 deletions.
27 changes: 27 additions & 0 deletions google/api/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ proto_library(
name = "control_proto",
srcs = ["control.proto"],
visibility = ["//visibility:public"],
deps = [
":policy_proto",
],
)

proto_library(
Expand Down Expand Up @@ -169,6 +172,15 @@ proto_library(
deps = [":annotations_proto"],
)

proto_library(
name = "policy_proto",
srcs = ["policy.proto"],
deps = [
":visibility_proto",
"@com_google_protobuf//:descriptor_proto",
],
)

proto_library(
name = "quota_proto",
srcs = ["quota.proto"],
Expand Down Expand Up @@ -211,6 +223,7 @@ proto_library(
":metric_proto",
":monitored_resource_proto",
":monitoring_proto",
":policy_proto",
":quota_proto",
":resource_proto",
":source_info_proto",
Expand Down Expand Up @@ -286,6 +299,7 @@ java_proto_library(
"metric_proto",
"monitored_resource_proto",
"monitoring_proto",
"policy_proto",
"quota_proto",
"resource_proto",
"routing_proto",
Expand Down Expand Up @@ -327,6 +341,7 @@ java_gapic_assembly_gradle_pkg(
"metric_proto",
"monitored_resource_proto",
"monitoring_proto",
"policy_proto",
"quota_proto",
"resource_proto",
"routing_proto",
Expand Down Expand Up @@ -449,6 +464,7 @@ go_proto_library(
":log_proto",
":logging_proto",
":monitoring_proto",
":policy_proto",
":quota_proto",
":service_proto",
":source_info_proto",
Expand Down Expand Up @@ -585,6 +601,11 @@ cc_proto_library(
deps = [":monitoring_proto"],
)

cc_proto_library(
name = "policy_cc_proto",
deps = [":policy_proto"],
)

cc_proto_library(
name = "quota_cc_proto",
deps = [":quota_proto"],
Expand Down Expand Up @@ -740,6 +761,11 @@ py_proto_library(
deps = ["monitoring_proto"],
)

py_proto_library(
name = "policy_py_proto",
deps = [":policy_proto"],
)

py_proto_library(
name = "quota_py_proto",
deps = ["quota_proto"],
Expand Down Expand Up @@ -815,6 +841,7 @@ php_proto_library(
"metric_proto",
"monitored_resource_proto",
"monitoring_proto",
"policy_proto",
"quota_proto",
"resource_proto",
"routing_proto",
Expand Down
5 changes: 5 additions & 0 deletions google/api/control.proto
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ syntax = "proto3";

package google.api;

import "google/api/policy.proto";

option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
option java_multiple_files = true;
option java_outer_classname = "ControlProto";
Expand All @@ -33,4 +35,7 @@ message Control {
// feature (like quota and billing) will be enabled. The recommended value for
// most services is servicecontrol.googleapis.com
string environment = 1;

// Defines policies applying to the API methods of the service.
repeated MethodPolicy method_policies = 4;
}
85 changes: 85 additions & 0 deletions google/api/policy.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.api;

import "google/protobuf/descriptor.proto";

option cc_enable_arenas = true;
option go_package = "google.golang.org/genproto/googleapis/api/serviceconfig;serviceconfig";
option java_multiple_files = true;
option java_outer_classname = "PolicyProto";
option java_package = "com.google.api";
option objc_class_prefix = "GAPI";

// Provides `google.api.field_policy` annotation at proto fields.
extend google.protobuf.FieldOptions {
// See [FieldPolicy][].
FieldPolicy field_policy = 158361448;
}

// Provides `google.api.method_policy` annotation at proto methods.
extend google.protobuf.MethodOptions {
// See [MethodPolicy][].
MethodPolicy method_policy = 161893301;
}

// Google API Policy Annotation
//
// This message defines a simple API policy annotation that can be used to
// annotate API request and response message fields with applicable policies.
// One field may have multiple applicable policies that must all be satisfied
// before a request can be processed. This policy annotation is used to
// generate the overall policy that will be used for automatic runtime
// policy enforcement and documentation generation.
message FieldPolicy {
// Selects one or more request or response message fields to apply this
// `FieldPolicy`.
//
// When a `FieldPolicy` is used in proto annotation, the selector must
// be left as empty. The service config generator will automatically fill
// the correct value.
//
// When a `FieldPolicy` is used in service config, the selector must be a
// comma-separated string with valid request or response field paths,
// such as "foo.bar" or "foo.bar,foo.baz".
string selector = 1;

// Specifies the required permission(s) for the resource referred to by the
// field. It requires the field contains a valid resource reference, and
// the request must pass the permission checks to proceed. For example,
// "resourcemanager.projects.get".
string resource_permission = 2;

// Specifies the resource type for the resource referred to by the field.
string resource_type = 3;
}

// Defines policies applying to an RPC method.
message MethodPolicy {
// Selects a method to which these policies should be enforced, for example,
// "google.pubsub.v1.Subscriber.CreateSubscription".
//
// Refer to [selector][google.api.DocumentationRule.selector] for syntax
// details.
//
// NOTE: This field must not be set in the proto annotation. It will be
// automatically filled by the service config compiler .
string selector = 9;

// Policies that are applicable to the request message.
repeated FieldPolicy request_policies = 2;
}

0 comments on commit 52a738b

Please sign in to comment.