syntax = "proto3";

import "google/protobuf/empty.proto";
import "common/common.proto";

option go_package = "git.perx.ru/perxis/perxis-go/roles;roles";

package content.roles;

message Role {
  // Внутренний идентификатор роли
  string id = 1;

  // Идентификатор пространства
  string space_id = 2;

  // Описание роли, назначение
  string description = 3;

  // Список правил доступа к коллекциям
  repeated common.Rule rules = 4;

  // Список доступных окружений (ID или Alias)
  repeated string environments = 5;

  // Разрешить доступ API управления:
  // - Управление коллекциями
  // - Управление приложениями
  // - Управление ролями
  // - Управление окружениями
  // - Управление приглашениями
  // - Управление locales
  // - Управление участниками
  bool allow_management = 10;
}

message CreateRequest {
  Role role = 1;
}

message CreateResponse {
  Role created = 1;
}

message GetRequest {
  string space_id = 1;
  string role_id = 2;
}

message GetResponse {
  Role role = 1;
}

message UpdateRequest {
  Role role = 1;
}

message ListRequest {
  string space_id = 1;
}

message ListResponse {
  repeated Role roles = 1;
}

message DeleteRequest {
  string space_id = 1;
  string role_id = 2;
}

service Roles  {

  // Create - создает роль в рамках пространства
  rpc Create(CreateRequest) returns(CreateResponse) {}

  // Get - возвращает роль по id
  rpc Get(GetRequest) returns(GetResponse) {}

  // Update - обновляет параметры роли
  rpc Update(UpdateRequest) returns(google.protobuf.Empty) {}

  // List - возвращает список ролей, созданных в пространстве
  rpc List(ListRequest) returns(ListResponse) {}

  // Delete - удаляет указанную роль из пространстве
  rpc Delete(DeleteRequest) returns(google.protobuf.Empty) {}

}