Skip to content
Snippets Groups Projects
Commit 3491d0e0 authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

WIP: Account API

parent 46ef1e65
No related branches found
No related tags found
1 merge request!61Draft: Описание сервиса приложений в составе Account
syntax = "proto3";
import "google/protobuf/empty.proto";
option go_package = "git.perx.ru/perxis/perxis-go/api";
package perxis;
// AccessPermission - права доступа
message AccessPermission {
string id = 1; // Идентификатор доступа
oneof scope {
string org = 10;
string space = 11;
}
oneof permission {
string role = 100;
string member = 101;
}
}
message Subject {
oneof subject {
string user_id = 1;
string client_id = 2;
}
}
\ No newline at end of file
syntax = "proto3";
import "google/protobuf/empty.proto";
import "account/accesscontrol.proto";
option go_package = "git.perx.ru/perxis/perxis-go/api";
package perxis;
// GrantAccessRequest - запрос на предоставление доступа к API
message GrantAccessRequest {
Subject subject = 1; // Идентификатор субъекта
AccessPermission permission = 2; // Права доступа
}
// GrantAccessResponse - ответ на запрос предоставления доступа к API
message GrantAccessResponse {
AccessPermission permission = 1; // Права доступа
}
// RevokeAccessRequest - запрос отзыва доступа к API
message RevokeAccessRequest {
oneof revoke {
string subject = 1; // Идентификатор субъекта
string permission_id = 2; // Идентификатор доступа
}
}
// RevokeAccessResponse - ответ на запрос отзыва доступа к API
message RevokeAccessResponse {
}
// ListAccessRequest - запрос списка доступов к API
message ListAccessRequest {
Subject subject = 1; // Идентификатор субъекта
}
// ListAccessResponse - ответ на запрос списка доступов к API
message ListAccessResponse {
repeated AccessPermission permissions = 1; // Список доступов
}
message GetAccessRequest {
string permission_id = 1; // Идентификатор доступа
}
message GetAccessResponse {
AccessPermission permission = 1; // Доступ
}
// AccessControlService - сервис управления доступом к API
service AccessControlService {
rpc GrantAccess(GrantAccessRequest) returns(GrantAccessResponse) {}
rpc RevokeAccess(RevokeAccessRequest) returns(RevokeAccessResponse) {}
rpc ListAccess(ListAccessRequest) returns(ListAccessResponse) {}
rpc GetAccess(GetAccessRequest) returns(GetAccessResponse) {}
}
syntax = "proto3";
import "google/protobuf/empty.proto";
option go_package = "git.perx.ru/perxis/perxis-go/api";
package perxis.account;
// OAuth - параметры авторизации клиента
message OAuth {
string client_id = 1; // Идентификатор клиента выданные IdP сервером, используется для идентификации клиента
string client_secret = 2; // Секретный Ключ клиента, используется для идентификации клиента (опционально)
string authority = 3; // Сервис который используется для авторизации клиента
string token_url = 4; // URL для получения/обновления access token клиента (опционально)
}
// TLS - параметры авторизации клиента
message TLS {
string subject = 1;
}
// Token - токен для доступа к API
message Token {
string token = 1; // Значение token
bool rotate = 2; // Признак необходимости перегенерации токена
}
// APIKey - ключ для доступа к API
message APIKey {
string key = 1; // Значение ключа
bool rotate = 2; // Признак необходимости перегенерации ключа
}
message Client{
// Идентификатор клиента внутри системы
string id = 1;
// Имя приложения (обязательное поле)
string name = 2;
// Описание приложения и назначение
string description = 3;
// Приложение отключено и не может авторизоваться
optional bool disabled = 7;
oneof method {
OAuth oauth = 101;
TLS tls = 102;
APIKey key = 103;
Token token = 104;
}
}
syntax = "proto3";
import "google/protobuf/empty.proto";
import "account/clients.proto";
option go_package = "git.perx.ru/perxis/perxis-go/api";
package perxis.account;
// CreateClientRequest - запрос на создание клиента
message CreateClientRequest {
Client client = 1;
}
// CreateClientResponse - ответ на запрос создания клиента
message CreateClientResponse {
Client client = 1;
}
// GetClientRequest - запрос на получение клиента
message GetClientRequest {
oneof client {
string id = 1;
string oauth_client_id = 2;
string tls_subject= 3;
string api_key = 4;
}
}
// GetClientResponse - ответ на запрос получения клиента
message GetClientResponse {
Client client = 1;
}
// UpdateClientRequest - запрос на обновление клиента
message UpdateClientRequest {
Client client = 1;
}
// UpdateClientResponse - ответ на запрос обновления клиента
message UpdateClientResponse {
Client client = 1;
}
// ListClientsRequest - запрос списка клиентов
message ListClientsRequest {
}
// ListClientsResponse - ответ на запрос списка клиентов
message ListClientsResponse {
repeated Client clients = 1;
}
// DeleteClientRequest - запрос на удаление клиента
message DeleteClientRequest {
string id = 1;
}
// DeleteClientResponse - ответ на запрос удаления клиента
message DeleteClientResponse {}
// ClientsService - сервис управления клиентами
service ClientsService {
rpc CreateClient(CreateClientRequest) returns(CreateClientResponse) {}
rpc GetClient(GetClientRequest) returns(GetClientResponse) {}
rpc UpdateClient(UpdateClientRequest) returns(UpdateClientResponse) {}
rpc ListClients(ListClientsRequest) returns(ListClientsResponse) {}
rpc DeleteClient(DeleteClientRequest) returns(DeleteClientResponse) {}
}
syntax = "proto3";
option go_package = "git.perx.ru/perxis/perxis-go/api";
package common;
import "google/protobuf/struct.proto";
message FindOptions {
repeated string sort = 1;
int32 page_num = 2; // Deprecated
int32 page_size = 3; // Deprecated
repeated string fields = 4;
bool exclude_fields = 5;
int32 offset = 6;
int32 limit = 7;
}
enum Access {
ANY = 0;
MINE = 1;
ROLE = 2;
}
enum Action {
UNKNOWN = 0;
CREATE = 1;
READ = 2;
UPDATE = 3;
DELETE = 4;
}
message Rule {
string collection_id = 1;
repeated Action actions = 2;
Access access = 3;
repeated string hidden_fields = 5;
// Deprecated
repeated string readonly_fields = 6;
repeated string writeonly_fields = 7;
string read_filter = 8;
string write_filter = 9;
repeated string deny_read_fields = 10;
repeated string deny_write_fields = 11;
}
message Collaborator {
string space_id = 1;
string subject = 2;
string role = 3;
}
message Version {
string server_version = 1;
string api_version = 2;
string build_time = 3;
string commit = 4;
int32 build_number = 5;
}
syntax = "proto3";
import "google/protobuf/empty.proto";
import "common/common.proto";
option go_package = "git.perx.ru/perxis/perxis-go/api";
package perxis;
message User {
string id = 1; // Уникальный идентификатор, присваивается системой
string name = 2; // Уникальное имя, login
repeated string identities = 3; // Authorization subjects (JWT sub claims)
string display_name = 4; // Имя пользователя для отображения
string email = 5; // Email, указывается пользователем
optional bool email_verified = 6; // Флаг что email проверен
string avatar_url = 7; // URI изображения пользователя
optional bool system = 10; // Системный пользователь (может получать доступ к расширенному API)
}
// CreateUserRequest - запрос на создание пользователя
message CreateUserRequest {
User user = 1;
}
// CreateUserResponse - ответ на запрос создания пользователя
message CreateUserResponse {
User user = 1;
}
// GetUserRequest - запрос на получение пользователя
message GetUserRequest {
oneof user {
string id = 1;
string identity = 2;
string email = 3;
}
}
// GetUserResponse - ответ на запрос получения пользователя
message GetUserResponse {
User user = 1;
}
message Filter {
repeated string id = 1;
repeated string name = 2;
repeated string identities = 3;
repeated string display_name = 4;
repeated string email = 5;
optional bool email_verified = 6;
optional bool system = 10;
}
// ListUsersRequest - запрос списка пользователей
message ListUsersRequest {
Filter filter = 1;
common.FindOptions options = 2;
}
// ListUsersResponse - ответ на запрос списка пользователей
message ListUsersResponse {
repeated User users = 1;
int64 total = 2;
}
// UpdateUserRequest - запрос на обновление пользователя
message UpdateUserRequest {
User user = 1;
}
// UpdateUserResponse - ответ на запрос обновления пользователя
message UpdateUserResponse {
User user = 1;
}
// DeleteRequest - запрос на удаление пользователя
message DeleteRequest {
string user_id = 1;
}
// DeleteUserResponse - ответ на запрос удаления пользователя
message DeleteUserResponse {
}
// UsersService - сервис управления пользователями
service UsersService {
rpc CreateUser(CreateUserRequest) returns(CreateUserResponse) {}
rpc GetUser(GetUserRequest) returns(GetUserResponse) {}
rpc ListUsers(ListUsersRequest) returns(ListUsersResponse) {}
rpc UpdateUser(UpdateUserRequest) returns(UpdateUserResponse) {}
rpc DeleteUser(DeleteRequest) returns(DeleteUserResponse) {}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment