using Asp.Versioning; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Api.Management.Security.Authorization.User; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Services.OperationStatus; using Umbraco.Cms.Web.Common.Authorization; using Umbraco.Extensions; namespace Umbraco.Cms.Api.Management.Controllers.User; [ApiVersion("1.0")] public class DeleteUserController : UserControllerBase { private readonly IAuthorizationService _authorizationService; private readonly IUserService _userService; private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor; public DeleteUserController( IAuthorizationService authorizationService, IUserService userService, IBackOfficeSecurityAccessor backOfficeSecurityAccessor) { _authorizationService = authorizationService; _userService = userService; _backOfficeSecurityAccessor = backOfficeSecurityAccessor; } [MapToApiVersion("1.0")] [HttpDelete("{id:guid}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ProblemDetails), StatusCodes.Status400BadRequest)] public async Task DeleteUser(Guid id) { AuthorizationResult authorizationResult = await _authorizationService.AuthorizeResourceAsync( User, UserPermissionResource.WithKeys(id), AuthorizationPolicies.AdminUserEditsRequireAdmin); if (!authorizationResult.Succeeded) { return Forbidden(); } UserOperationStatus result = await _userService.DeleteAsync(CurrentUserKey(_backOfficeSecurityAccessor), id); return result is UserOperationStatus.Success ? Ok() : UserOperationStatusResult(result); } }