// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package monorail.v3;

option go_package = "infra/monorailv2/api/v3/api_proto";

import "google/api/field_behavior.proto";
import "api/v3/api_proto/permission_objects.proto";

// ***DO NOT CALL rpcs IN THIS SERVICE.***
// This service is for Monorail's frontend only.

// Permissions service includes all methods needed for fetching permissions.
service Permissions {
  // status: DO NOT USE
  // Returns the requester's permissions for the given resource.
  //
  // Raises:
  //  PERMISSION_DENIED if the given resource does not exist and/or the
  //      requester does not have permission to view the resource's name space.
  //  NOT_FOUND if the given resource does not exist.
  rpc GetPermissionSet (GetPermissionSetRequest) returns (PermissionSet) {}

  // status: DO NOT USE
  // Returns the requester's permissions for all the given resources.
  //
  // Raises:
  //  PERMISSION_DENIED if any of the given resources do not exist and/or the
  //      requester does not have permission to view one of the resource's
  //      name space.
  // NOT_FOUND if one of the given resources do not exist.
  rpc BatchGetPermissionSets (BatchGetPermissionSetsRequest) returns (BatchGetPermissionSetsResponse) {}
}


// Request message for the GetPermissionSet emthod.
// Next available tag: 2
message GetPermissionSetRequest {
  // The resource name of the resource permissions to retrieve.
  string name = 1 [ (google.api.field_behavior) = REQUIRED ];
}


// Request message for the BatchGetPermissionSets method.
// Next available tag: 2
message BatchGetPermissionSetsRequest {
  // The resource names of the resource permissions to retrieve.
  repeated string names = 1 [ (google.api.field_behavior) = REQUIRED ];
}


// Response message for the BatchGetPermissionSets method.
// Next available tag: 2
message BatchGetPermissionSetsResponse {
  // The Permissions, one for each of the given resources.
  repeated PermissionSet permission_sets = 1;
}
