This commit is contained in:
2026-10-03 17:11:51 +07:00
parent 7d4361a315
commit fdb9729463
+6
View File
@@ -3,6 +3,7 @@ package app
import ( import (
"context" "context"
"errors" "errors"
"log"
"net/netip" "net/netip"
"strings" "strings"
@@ -215,12 +216,17 @@ func (s *server) GetPermissions(ctx context.Context, _ *proto.GetPermissionsReq)
func (s *server) ChangeUserPassword(ctx context.Context, req *proto.ChangeUserPasswordReq) (*proto.ChangeUserPasswordRsp, error) { func (s *server) ChangeUserPassword(ctx context.Context, req *proto.ChangeUserPasswordReq) (*proto.ChangeUserPasswordRsp, error) {
claims, ok := processor_jwt.ClaimsFromContext(ctx) claims, ok := processor_jwt.ClaimsFromContext(ctx)
if !ok || claims == nil { if !ok || claims == nil {
log.Printf("change user password failed: authentication missing, target_user_id=%d", req.GetID())
return nil, status.Error(codes.Unauthenticated, "Требуется авторизация") return nil, status.Error(codes.Unauthenticated, "Требуется авторизация")
} }
if !roles.HasRole(claims, roles.Admin) { if !roles.HasRole(claims, roles.Admin) {
log.Printf("change user password failed: admin role required, actor_user_id=%d target_user_id=%d", claims.UserID, req.GetID())
return nil, status.Error(codes.PermissionDenied, "Недостаточно прав") return nil, status.Error(codes.PermissionDenied, "Недостаточно прав")
} }
err := s.usersService.ChangeUserPassword(ctx, claims.UserID, int(req.GetID()), req.GetNewPassword()) err := s.usersService.ChangeUserPassword(ctx, claims.UserID, int(req.GetID()), req.GetNewPassword())
if err != nil {
log.Printf("change user password failed: actor_user_id=%d target_user_id=%d: %v", claims.UserID, req.GetID(), err)
}
switch { switch {
case errors.Is(err, users_service.ErrPasswordChangeForbidden): case errors.Is(err, users_service.ErrPasswordChangeForbidden):
return nil, status.Error(codes.PermissionDenied, err.Error()) return nil, status.Error(codes.PermissionDenied, err.Error())