@@ -35,8 +35,6 @@ class TAlterLogin: public TSubOperationBase {
3535 auto response = context.SS ->LoginProvider .CreateUser (
3636 {.User = createUser.GetUser (), .Password = createUser.GetPassword ()});
3737
38- AddIsUserAdmin (createUser.GetUser (), context.SS ->LoginProvider , additionalParts);
39-
4038 if (response.Error ) {
4139 result->SetStatus (NKikimrScheme::StatusPreconditionFailed, response.Error );
4240 } else {
@@ -54,34 +52,41 @@ class TAlterLogin: public TSubOperationBase {
5452 }
5553 }
5654 result->SetStatus (NKikimrScheme::StatusSuccess);
55+
56+ AddIsUserAdmin (createUser.GetUser (), context.SS ->LoginProvider , additionalParts);
5757 }
5858 break ;
5959 }
6060 case NKikimrSchemeOp::TAlterLogin::kModifyUser : {
6161 const auto & modifyUser = alterLogin.GetModifyUser ();
62-
63- AddIsUserAdmin (modifyUser.GetUser (), context.SS ->LoginProvider , additionalParts);
64-
6562 auto response = context.SS ->LoginProvider .ModifyUser ({.User = modifyUser.GetUser (), .Password = modifyUser.GetPassword ()});
6663 if (response.Error ) {
6764 result->SetStatus (NKikimrScheme::StatusPreconditionFailed, response.Error );
6865 } else {
6966 auto & sid = context.SS ->LoginProvider .Sids [modifyUser.GetUser ()];
7067 db.Table <Schema::LoginSids>().Key (sid.Name ).Update <Schema::LoginSids::SidType, Schema::LoginSids::SidHash>(sid.Type , sid.Hash );
7168 result->SetStatus (NKikimrScheme::StatusSuccess);
69+
70+ AddIsUserAdmin (modifyUser.GetUser (), context.SS ->LoginProvider , additionalParts);
71+ AddLastSuccessfulLogin (sid, additionalParts);
7272 }
7373 break ;
7474 }
7575 case NKikimrSchemeOp::TAlterLogin::kRemoveUser : {
7676 const auto & removeUser = alterLogin.GetRemoveUser ();
7777
78- AddIsUserAdmin (removeUser.GetUser (), context.SS ->LoginProvider , additionalParts);
78+ auto sid = context.SS ->LoginProvider .Sids .find (removeUser.GetUser ());
79+ if (context.SS ->LoginProvider .Sids .end () != sid) {
80+ AddLastSuccessfulLogin (sid->second , additionalParts);
81+ }
7982
8083 auto response = RemoveUser (context, removeUser, db);
8184 if (response.Error ) {
8285 result->SetStatus (NKikimrScheme::StatusPreconditionFailed, response.Error );
8386 } else {
8487 result->SetStatus (NKikimrScheme::StatusSuccess);
88+
89+ AddIsUserAdmin (removeUser.GetUser (), context.SS ->LoginProvider , additionalParts);
8590 }
8691 break ;
8792 }
@@ -182,7 +187,9 @@ class TAlterLogin: public TSubOperationBase {
182187 userSID = context.UserToken ->GetUserSID ();
183188 sanitizedToken = context.UserToken ->GetSanitizedToken ();
184189 }
185- AuditLogModifySchemeTransaction (Transaction, result->Record , context.SS , context.PeerName , userSID, sanitizedToken, ui64 (txId), additionalParts);
190+ const auto status = result->Record .GetStatus ();
191+ const auto reason = result->Record .HasReason () ? result->Record .GetReason () : TString ();
192+ AuditLogModifySchemeOperation (Transaction, status, reason, context.SS , context.PeerName , userSID, sanitizedToken, ui64 (txId), additionalParts);
186193 }
187194
188195 if (result->Record .GetStatus () == NKikimrScheme::StatusSuccess) {
@@ -282,7 +289,13 @@ class TAlterLogin: public TSubOperationBase {
282289 }
283290
284291 if (isAdmin) {
285- additionalParts.emplace_back (" account_type" , " admin" );
292+ additionalParts.emplace_back (" login_user_level" , " admin" );
293+ }
294+ }
295+
296+ void AddLastSuccessfulLogin (NLogin::TLoginProvider::TSidRecord& sid, TParts& additionalParts) {
297+ if (sid.LastSuccessfulLogin ) {
298+ additionalParts.emplace_back (" last_login" , TInstant::FromValue (sid.LastSuccessfulLogin ).ToString ());
286299 }
287300 }
288301};
0 commit comments