From 76f0df5506cebd8d4f25a3d6b284532b172d20d6 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 13 May 2021 10:48:19 +0300 Subject: First registered user becomes an administrator and implemented proper handling of user creation failure inside service --- ExamTemplate/Services/Services/UserService.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/ExamTemplate/Services/Services/UserService.cs b/ExamTemplate/Services/Services/UserService.cs index e82859a..dab0801 100644 --- a/ExamTemplate/Services/Services/UserService.cs +++ b/ExamTemplate/Services/Services/UserService.cs @@ -8,6 +8,7 @@ using ExamTemplate.Services.Models.User; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; using ExamTemplate.Services.Interfaces; +using ExamTemplate.Common; namespace ExamTemplate.Services.Services { @@ -34,9 +35,20 @@ namespace ExamTemplate.Services.Services user.PasswordHash = this._userManager.PasswordHasher.HashPassword(user, registerUserServiceModel.Password); IdentityResult userCreateResult = await this._userManager.CreateAsync(user); - IdentityResult addRoleResult = await this._userManager.AddToRoleAsync(user, "User"); - return userCreateResult.Succeeded && addRoleResult.Succeeded; + if (!userCreateResult.Succeeded) + { + await this._userManager.DeleteAsync(user); + return false; + } + + IdentityResult addRoleResult; + if (await this._userManager.Users.CountAsync() == 1) // 1, because we added the user in line 37 + addRoleResult = await this._userManager.AddToRoleAsync(user, RoleConst.Admin); + else + addRoleResult = await this._userManager.AddToRoleAsync(user, RoleConst.User); + + return addRoleResult.Succeeded; } public async Task LoginUserAsync(LoginUserServiceModel loginUserServiceModel) -- cgit v1.2.3