From 284059d19dd8e39778328e54eb944fcb740fff72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BC=D0=B8=D1=82=D1=80=D0=B8=D0=B9?= Date: Sat, 11 Apr 2026 21:10:31 +0300 Subject: [PATCH] add admin methods --- package.json | 2 +- proto/admin/admin-account.proto | 99 ++++++++++++++++++++++----------- proto/sso/auth.proto | 33 ++++++++++- 3 files changed, 101 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 05eacb4..358e3de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@lendry-erp/contracts", - "version": "1.2.15", + "version": "1.2.16", "description": "Protobuf definitions and generated TypeScript types", "type": "commonjs", "main": "./dist/index.js", diff --git a/proto/admin/admin-account.proto b/proto/admin/admin-account.proto index e50c074..e64a548 100644 --- a/proto/admin/admin-account.proto +++ b/proto/admin/admin-account.proto @@ -1,34 +1,34 @@ syntax = "proto3"; -package admin.account.v1; +package admin.v1; option go_package = "git.lendry.ru/lendry-erp/proto.git/go;pb"; -service AdminAccountService { - rpc AdminResetPassword (AdminResetPasswordRequest) returns (AdminResetPasswordResponse); +// Единый сервис для всех административных операций +service AdminService { + // Управление учетными записями rpc CreateUser(CreateUserRequest) returns (CreateUserResponse); rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse); + rpc BlockUser(BlockUserRequest) returns (BlockUserResponse); + rpc UnblockUser(UnblockUserRequest) returns (UnblockUserResponse); + + // Управление данными и безопасностью rpc ChangeData(ChangeDataRequest) returns (ChangeDataResponse); + rpc AdminResetPassword (AdminResetPasswordRequest) returns (AdminResetPasswordResponse); + + // Управление ролями (RBAC) rpc AssignRole (AssignRoleRequest) returns (AssignRoleResponse); rpc RevokeRole (RevokeRoleRequest) returns (RevokeRoleResponse); - rpc BlockUser(BlockUserRequest) returns (BlockUserResponse); - rpc UnblockUser(UnblockUserRequest) returns (UnblockUserResponse); + // Управление черным списком IP rpc BlockIp(BlockIpRequest) returns (BlockIpResponse); rpc UnblockIp(UnblockIpRequest) returns (UnblockIpResponse); + // Синхронизация с поисковым движком (Elasticsearch) rpc SyncUsersToSearch (SyncUsersToSearchRequest) returns (SyncUsersToSearchResponse); } -message AdminResetPasswordRequest { - string user_id = 1; - string new_password = 2; -} - -message AdminResetPasswordResponse { - bool success = 1; - string message = 2; -} +// --- DTO для управления учетными записями --- message CreateUserRequest { string username = 1; @@ -50,6 +50,29 @@ message DeleteUserResponse { string message = 2; } +message BlockUserRequest { + string user_id = 1; // Кого блокируем + string admin_id = 2; // Кто блокирует + optional string reason = 3; +} + +message BlockUserResponse { + bool success = 1; + string message = 2; +} + +message UnblockUserRequest { + string user_id = 1; + string admin_id = 2; +} + +message UnblockUserResponse { + bool success = 1; + string message = 2; +} + +// --- DTO для управления данными и безопасностью --- + message ChangeDataRequest { string user_id = 1; string session_id = 2; @@ -69,54 +92,68 @@ message ChangeDataResponse { string message = 2; } +message AdminResetPasswordRequest { + string user_id = 1; + string new_password = 2; +} + +message AdminResetPasswordResponse { + bool success = 1; + string message = 2; +} + +// --- DTO для управления ролями (RBAC) --- + message AssignRoleRequest { string user_id = 1; - string role_id = 2; // В gRPC передаем как string, внутри преобразуем в Int + string role_id = 2; // Передаем как string, внутри парсим в Int } + message AssignRoleResponse { bool success = 1; string message = 2; } + message RevokeRoleRequest { string user_id = 1; string role_id = 2; } + message RevokeRoleResponse { bool success = 1; string message = 2; } -message BlockUserRequest { - string user_id = 1; // Кого блокируем - string admin_id = 2; // Кто блокирует - optional string reason = 3; -} -message BlockUserResponse { bool success = 1; string message = 2; } - -message UnblockUserRequest { - string user_id = 1; - string admin_id = 2; -} -message UnblockUserResponse { bool success = 1; string message = 2; } +// --- DTO для управления черным списком IP --- message BlockIpRequest { string ip_address = 1; string admin_id = 2; optional string reason = 3; } -message BlockIpResponse { bool success = 1; string message = 2; } + +message BlockIpResponse { + bool success = 1; + string message = 2; +} message UnblockIpRequest { string ip_address = 1; string admin_id = 2; } -message UnblockIpResponse { bool success = 1; string message = 2; } + +message UnblockIpResponse { + bool success = 1; + string message = 2; +} + +// --- DTO для синхронизации с поиском --- message SyncUsersToSearchRequest { - // Можно оставить пустым, так как нам не нужны входные данные + // Пустой запрос, так как параметры не требуются } message SyncUsersToSearchResponse { bool success = 1; string message = 2; -} +} \ No newline at end of file diff --git a/proto/sso/auth.proto b/proto/sso/auth.proto index 0a62939..5e936ab 100644 --- a/proto/sso/auth.proto +++ b/proto/sso/auth.proto @@ -13,7 +13,11 @@ service AuthService { rpc LogoutOther (LogoutRequest) returns (LogoutResponse); rpc GetSessions(GetSessionRequest) returns (GetSessionsResponse); rpc TerminateSession(TerminateSessionRequest) returns (TerminateSessionResponse); - + + rpc SystemCreateAccount (SystemCreateAccountRequest) returns (SystemCreateAccountResponse); + rpc SystemChangeStatus (SystemChangeStatusRequest) returns (SystemChangeStatusResponse); + rpc SystemUpdatePassword (SystemUpdatePasswordRequest) returns (SystemUpdatePasswordResponse); + rpc SystemUpdatePin (SystemUpdatePinRequest) returns (SystemUpdatePinResponse); } message LoginRequest { @@ -101,4 +105,31 @@ message TerminateSessionResponse { string message = 2; } +message SystemCreateAccountRequest { + string username = 1; + string password_hash = 2; // Хеш пароля генерирует Admin Service и передает сюда + bool is_ldap = 3; +} +message SystemCreateAccountResponse { + string account_id = 1; +} + +message SystemChangeStatusRequest { + string account_id = 1; + string status = 2; // 'ACTIVE', 'BLOCKED', 'DELETED' +} +message SystemChangeStatusResponse { bool success = 1; } + +message SystemUpdatePasswordRequest { + string account_id = 1; + string new_password_hash = 2; +} +message SystemUpdatePasswordResponse { bool success = 1; } + +message SystemUpdatePinRequest { + string account_id = 1; + optional string pin_hash = 2; // null если удаляем +} + +message SystemUpdatePinResponse { bool success = 1; }