| syntax = "proto3"; | 
 | package metropolis.proto.ext; | 
 | option go_package = "source.monogon.dev/metropolis/proto/ext"; | 
 |  | 
 | import "google/protobuf/descriptor.proto"; | 
 |  | 
 | extend google.protobuf.MethodOptions { | 
 |     // Set authorization policy for this RPC. If not set but the service is | 
 |     // configured to use authorization, the default/zero value of the | 
 |     // Authorization message will be used (effectively allowing all | 
 |     // authenticated users). | 
 |     Authorization authorization = 1000; | 
 | } | 
 |  | 
 |  | 
 | // Permission is a combined activity/object that an identity can perform in the | 
 | // cluster. | 
 | // | 
 | // MVP: this might get replaced with a full activity/object split later on. | 
 | enum Permission { | 
 |     PERMISSION_UNSPECIFIED = 0; | 
 |     PERMISSION_GET_REGISTER_TICKET = 1; | 
 |     PERMISSION_READ_CLUSTER_STATUS = 2; | 
 |     PERMISSION_UPDATE_NODE_SELF = 3; | 
 |     PERMISSION_APPROVE_NODE = 4; | 
 |     PERMISSION_UPDATE_NODE_ROLES = 5; | 
 |     PERMISSION_READ_NODE_LOGS = 6; | 
 | } | 
 |  | 
 | // Authorization policy for an RPC method. This message/API does not have the | 
 | // same stability guarantees as the rest of Metropolis APIs - it is internal, | 
 | // might change in wire and text incompatible ways and should not be used by | 
 | // consumers of the API. | 
 | message Authorization { | 
 |     // Set of permissions required from the caller. | 
 |     repeated Permission need = 1; | 
 |     // If set, this API can be called unauthorized and unauthenticated, thereby | 
 |     // allowing full access to anyone, including public access by anyone with | 
 |     // network connectivity to the cluster.. Ignored if `need` is non-empty. | 
 |     bool allow_unauthenticated = 2; | 
 | } |