diff --git a/eFormAPI/eFormAPI.Web/Resources/SharedResource.da.resx b/eFormAPI/eFormAPI.Web/Resources/SharedResource.da.resx index ac5634f2a8..df66f02d4f 100644 --- a/eFormAPI/eFormAPI.Web/Resources/SharedResource.da.resx +++ b/eFormAPI/eFormAPI.Web/Resources/SharedResource.da.resx @@ -573,4 +573,13 @@ Plugin ikke fundet + + Du kan ikke se, ændre eller slette primæradministrator + + + Det er ikke muligt at skifte rolle for primæradministrator + + + Rolle ikke fundet + \ No newline at end of file diff --git a/eFormAPI/eFormAPI.Web/Resources/SharedResource.de.resx b/eFormAPI/eFormAPI.Web/Resources/SharedResource.de.resx index 9fc903114c..14a0584a9e 100644 --- a/eFormAPI/eFormAPI.Web/Resources/SharedResource.de.resx +++ b/eFormAPI/eFormAPI.Web/Resources/SharedResource.de.resx @@ -555,4 +555,13 @@ Plugin nicht gefunden + + U kunt primaire beheerder niet bekijken, wijzigen of verwijderen + + + Het is niet mogelijk om de rol voor primaire beheerder te wijzigen + + + Rol niet gevonden + \ No newline at end of file diff --git a/eFormAPI/eFormAPI.Web/Resources/SharedResource.resx b/eFormAPI/eFormAPI.Web/Resources/SharedResource.resx index 7ed71ab581..2de4e1202f 100644 --- a/eFormAPI/eFormAPI.Web/Resources/SharedResource.resx +++ b/eFormAPI/eFormAPI.Web/Resources/SharedResource.resx @@ -573,4 +573,13 @@ Plugin not found + + You can't view, change or delete primary admin + + + It's not possible to change role for primary admin + + + Role not fond + \ No newline at end of file diff --git a/eFormAPI/eFormAPI.Web/Services/AdminService.cs b/eFormAPI/eFormAPI.Web/Services/AdminService.cs index 111eb74962..26233f26be 100644 --- a/eFormAPI/eFormAPI.Web/Services/AdminService.cs +++ b/eFormAPI/eFormAPI.Web/Services/AdminService.cs @@ -127,6 +127,17 @@ public async Task UpdateUser(UserRegisterModel userRegisterMode { try { + if (userRegisterModel.Id == 1 && _userService.UserId != 1) + { + return new OperationResult(false, _localizationService.GetString("CantEditPrimaryAdminUser")); + } + + if (userRegisterModel.Role != EformRole.Admin && userRegisterModel.Role != EformRole.User) + { + return new OperationResult(false, + _localizationService.GetString("RoleNotFound")); + } + var user = await _userService.GetByIdAsync(userRegisterModel.Id); if (user == null) { @@ -134,6 +145,12 @@ public async Task UpdateUser(UserRegisterModel userRegisterMode _localizationService.GetStringWithFormat("UserNotFoundUserName", userRegisterModel.UserName)); } + + if (_userService.UserId == 1 && !await _userManager.IsInRoleAsync(user, userRegisterModel.Role)) + { + return new OperationResult(false, _localizationService.GetString("CantUpdateRoleForPrimaryAdminUser")); + } + var isAdmin = await _userManager.IsInRoleAsync(user, EformRole.Admin); if (!_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId) && !isAdmin) { @@ -141,11 +158,6 @@ public async Task UpdateUser(UserRegisterModel userRegisterMode _localizationService.GetString("SecurityGroupNotFound")); } - if (userRegisterModel.Role == null) - { - return new OperationResult(false, _localizationService.GetString("RoleIsRequired")); - } - if (isAdmin && _userService.Role != EformRole.Admin) { return new OperationResult(false, _localizationService.GetString("YouCantViewChangeOrDeleteAdmin")); @@ -156,6 +168,7 @@ public async Task UpdateUser(UserRegisterModel userRegisterMode user.UserName = userRegisterModel.Email; user.FirstName = userRegisterModel.FirstName; user.LastName = userRegisterModel.LastName; + var result = await _userManager.UpdateAsync(user); if (!result.Succeeded) { @@ -169,6 +182,15 @@ public async Task UpdateUser(UserRegisterModel userRegisterMode await _userManager.AddPasswordAsync(user, userRegisterModel.Password); } + // change role + if (!await _userManager.IsInRoleAsync(user, userRegisterModel.Role)) + { + var currentUserRole = await _userManager.GetRolesAsync(user); + await _userManager.RemoveFromRolesAsync(user, currentUserRole); + + await _userManager.AddToRoleAsync(user, userRegisterModel.Role); + } + // Change group if (userRegisterModel.GroupId > 0 && user.Id > 0) { @@ -191,6 +213,19 @@ public async Task UpdateUser(UserRegisterModel userRegisterMode await _dbContext.SaveChangesAsync(); } + if (userRegisterModel.Role == EformRole.Admin) + { + var securityGroupUsers = await _dbContext.SecurityGroupUsers.Where(x => x.EformUserId == user.Id) + .ToListAsync(); + + if (securityGroupUsers.Any()) + { + _dbContext.SecurityGroupUsers.RemoveRange(securityGroupUsers); + + await _dbContext.SaveChangesAsync(); + } + } + return new OperationResult(true, _localizationService.GetStringWithFormat("UserUserNameWasUpdated", user.UserName)); } @@ -205,14 +240,21 @@ public async Task CreateUser(UserRegisterModel userRegisterMode { try { + if (userRegisterModel.Role != EformRole.Admin && userRegisterModel.Role != EformRole.User) + { + return new OperationResult(false, + _localizationService.GetString("RoleNotFound")); + } + var userResult = await _userManager.FindByNameAsync(userRegisterModel.Email); + if (userResult != null) { return new OperationResult(false, _localizationService.GetStringWithFormat("UserUserNameAlreadyExist", userRegisterModel.Email)); } - if (!_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId)) + if (userRegisterModel.Role != EformRole.Admin && !_dbContext.SecurityGroups.Any(x => x.Id == userRegisterModel.GroupId)) { return new OperationResult(false, _localizationService.GetString("SecurityGroupNotFound")); @@ -235,10 +277,12 @@ public async Task CreateUser(UserRegisterModel userRegisterMode return new OperationResult(false, string.Join(" ", result.Errors.Select(x=>x.Description).ToArray())); } + + // change role - await _userManager.AddToRoleAsync(user, EformRole.User); + await _userManager.AddToRoleAsync(user, userRegisterModel.Role); // add to group - if (userRegisterModel.GroupId > 0 && user.Id > 0) + if (userRegisterModel.GroupId > 0 && user.Id > 0 && userRegisterModel.Role != EformRole.Admin) { var securityGroupUser = new SecurityGroupUser() { diff --git a/eform-client/src/app/modules/account-management/components/users/new-user-modal/new-user-modal.component.html b/eform-client/src/app/modules/account-management/components/users/new-user-modal/new-user-modal.component.html index 7ec3a5777c..f2567e8a9e 100644 --- a/eform-client/src/app/modules/account-management/components/users/new-user-modal/new-user-modal.component.html +++ b/eform-client/src/app/modules/account-management/components/users/new-user-modal/new-user-modal.component.html @@ -46,7 +46,7 @@

{{ 'New User' | translate }}

@@ -55,6 +55,18 @@

{{ 'New User' | translate }}

+ +
+
{{'Edit User' | translate}}
+
+ +
= new EventEmitter(); selectedUserModel: UserRegisterModel = new UserRegisterModel; - newUserModel: UserRegisterModel = new UserRegisterModel; spinnerStatus = false; constructor(private adminService: AdminService) { @@ -45,4 +44,9 @@ export class UserEditModalComponent implements OnInit { } this.spinnerStatus = false; }); } + + onUserRoleUpdated(e: string) { + this.selectedUserModel.role = e; + this.selectedUserModel.groupId = null; + } }