diff --git a/src/Umbraco.Cms.Api.Management/Controllers/User/UpdateUserGroupsUserController.cs b/src/Umbraco.Cms.Api.Management/Controllers/User/UpdateUserGroupsUserController.cs index d12aa5d051..5aeda7f114 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/User/UpdateUserGroupsUserController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/User/UpdateUserGroupsUserController.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.Controllers.UserGroup; using Umbraco.Cms.Api.Management.Routing; using Umbraco.Cms.Api.Management.ViewModels.User; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Security.Authorization; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Services.OperationStatus; @@ -48,10 +49,12 @@ public class UpdateUserGroupsUserController : UserGroupControllerBase return Forbidden(); } - UserGroupOperationStatus status = await _userGroupService.UpdateUserGroupsOnUsersAsync( + Attempt result = await _userGroupService.UpdateUserGroupsOnUsersAsync( requestModel.UserGroupIds.Select(x => x.Id).ToHashSet(), requestModel.UserIds.Select(x => x.Id).ToHashSet()); - return UserGroupOperationStatusResult(status); + return result.Success + ? Ok() + : UserGroupOperationStatusResult(result.Result); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/AddUsersToUserGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/AddUsersToUserGroupController.cs index 947a7efa95..7e88fb7103 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/AddUsersToUserGroupController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/AddUsersToUserGroupController.cs @@ -51,11 +51,11 @@ public class AddUsersToUserGroupController : UserGroupControllerBase return Forbidden(); } - UserGroupOperationStatus result = await _userGroupService.AddUsersToUserGroupAsync( + Attempt result = await _userGroupService.AddUsersToUserGroupAsync( new UsersToUserGroupManipulationModel(id, userIds.Select(x => x.Id).ToArray()), CurrentUserKey(_backOfficeSecurityAccessor)); - return result == UserGroupOperationStatus.Success + return result.Success ? Ok() - : UserGroupOperationStatusResult(result); + : UserGroupOperationStatusResult(result.Result); } } diff --git a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/RemoveUsersFromUserGroupController.cs b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/RemoveUsersFromUserGroupController.cs index 1d7aaaed72..924763b97d 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/RemoveUsersFromUserGroupController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/UserGroup/RemoveUsersFromUserGroupController.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.ViewModels; +using Umbraco.Cms.Core; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Security.Authorization; @@ -46,11 +47,11 @@ public class RemoveUsersFromUserGroupController : UserGroupControllerBase return Forbidden(); } - UserGroupOperationStatus result = await _userGroupService.RemoveUsersFromUserGroupAsync( + Attempt result = await _userGroupService.RemoveUsersFromUserGroupAsync( new UsersToUserGroupManipulationModel(id, userIds.Select(x => x.Id).ToArray()), CurrentUserKey(_backOfficeSecurityAccessor)); - return result == UserGroupOperationStatus.Success + return result.Success ? Ok() - : UserGroupOperationStatusResult(result); + : UserGroupOperationStatusResult(result.Result); } } diff --git a/src/Umbraco.Core/Services/IUserGroupService.cs b/src/Umbraco.Core/Services/IUserGroupService.cs index fb66726b6c..3b8e78a4f5 100644 --- a/src/Umbraco.Core/Services/IUserGroupService.cs +++ b/src/Umbraco.Core/Services/IUserGroupService.cs @@ -107,8 +107,8 @@ public interface IUserGroupService /// The user groups the users should be part of. /// The user whose groups we want to alter. /// An attempt indicating if the operation was a success as well as a more detailed . - Task UpdateUserGroupsOnUsersAsync(ISet userGroupKeys, ISet userKeys); + Task> UpdateUserGroupsOnUsersAsync(ISet userGroupKeys, ISet userKeys); - Task AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey); - Task RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey); + Task> AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey); + Task> RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey); } diff --git a/src/Umbraco.Core/Services/UserGroupService.cs b/src/Umbraco.Core/Services/UserGroupService.cs index 1d9461681c..56c2222b3c 100644 --- a/src/Umbraco.Core/Services/UserGroupService.cs +++ b/src/Umbraco.Core/Services/UserGroupService.cs @@ -210,7 +210,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService return Attempt.Succeed(UserGroupOperationStatus.Success); } - public async Task UpdateUserGroupsOnUsersAsync( + public async Task> UpdateUserGroupsOnUsersAsync( ISet userGroupKeys, ISet userKeys) { @@ -233,7 +233,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService if (adminGroup is not null && adminGroup.UserCount <= usersToDeAdmin.Length) { scope.Complete(); - return UserGroupOperationStatus.AdminGroupCannotBeEmpty; + return Attempt.Fail(UserGroupOperationStatus.AdminGroupCannotBeEmpty); } } } @@ -251,7 +251,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService scope.Complete(); - return UserGroupOperationStatus.Success; + return Attempt.Succeed(UserGroupOperationStatus.Success); } private Attempt ValidateUserGroupDeletion(IUserGroup? userGroup) @@ -393,7 +393,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService return Attempt.SucceedWithStatus(UserGroupOperationStatus.Success, userGroup); } - public async Task AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey) + public async Task> AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey) { using ICoreScope scope = ScopeProvider.CreateCoreScope(); @@ -401,7 +401,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService if (resolveAttempt.Success is false) { - return resolveAttempt.Status; + return Attempt.Fail(resolveAttempt.Status); } ResolvedUserToUserGroupManipulationModel? resolvedModel = resolveAttempt.Result; @@ -423,10 +423,10 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService scope.Complete(); - return UserGroupOperationStatus.Success; + return Attempt.Succeed(UserGroupOperationStatus.Success); } - public async Task RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey) + public async Task> RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey) { using ICoreScope scope = ScopeProvider.CreateCoreScope(); @@ -434,7 +434,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService if (resolveAttempt.Success is false) { - return resolveAttempt.Status; + return Attempt.Fail(resolveAttempt.Status); } ResolvedUserToUserGroupManipulationModel? resolvedModel = resolveAttempt.Result; @@ -450,7 +450,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService // We can't remove a user from a group they're not part of. if (user.Groups.Select(x => x.Key).Contains(resolvedModel.UserGroup.Key) is false) { - return UserGroupOperationStatus.UserNotInGroup; + return Attempt.Fail(UserGroupOperationStatus.UserNotInGroup); } user.RemoveGroup(resolvedModel.UserGroup.Alias); @@ -461,14 +461,14 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService if (resolvedModel.UserGroup.Key == Constants.Security.AdminGroupKey && resolvedModel.UserGroup.UserCount <= resolvedModel.Users.Length) { - return UserGroupOperationStatus.AdminGroupCannotBeEmpty; + return Attempt.Fail(UserGroupOperationStatus.AdminGroupCannotBeEmpty); } _userService.Save(resolvedModel.Users); scope.Complete(); - return UserGroupOperationStatus.Success; + return Attempt.Succeed(UserGroupOperationStatus.Success); } ///