Fix user deletion.

pull/3437/head
Patrick Barron 4 years ago
parent 7da49d57b1
commit 9a01cd8590

@ -192,15 +192,15 @@ namespace Jellyfin.Server.Implementations.Users
}
/// <inheritdoc/>
public void DeleteUser(User user)
public void DeleteUser(Guid userId)
{
var dbContext = _dbProvider.CreateContext();
var user = dbContext.Users.Find(userId);
if (user == null)
{
throw new ArgumentNullException(nameof(user));
throw new ArgumentNullException(nameof(userId));
}
var dbContext = _dbProvider.CreateContext();
if (dbContext.Users.Find(user.Id) == null)
{
throw new ArgumentException(string.Format(
@ -226,9 +226,18 @@ namespace Jellyfin.Server.Implementations.Users
CultureInfo.InvariantCulture,
"The user '{0}' cannot be deleted because there must be at least one admin user in the system.",
user.Username),
nameof(user));
nameof(userId));
}
// Clear all entities related to the user from the database.
if (user.ProfileImage != null)
{
dbContext.Remove(user.ProfileImage);
}
dbContext.RemoveRange(user.Permissions);
dbContext.RemoveRange(user.Preferences);
dbContext.RemoveRange(user.AccessSchedules);
dbContext.Users.Remove(user);
dbContext.SaveChanges();
OnUserDeleted?.Invoke(this, new GenericEventArgs<User>(user));

@ -365,15 +365,8 @@ namespace MediaBrowser.Api
public Task DeleteAsync(DeleteUser request)
{
var user = _userManager.GetUserById(request.Id);
if (user == null)
{
throw new ResourceNotFoundException("User not found");
}
_sessionMananger.RevokeUserTokens(user.Id, null);
_userManager.DeleteUser(user);
_userManager.DeleteUser(request.Id);
_sessionMananger.RevokeUserTokens(request.Id, null);
return Task.CompletedTask;
}

@ -111,8 +111,8 @@ namespace MediaBrowser.Controller.Library
/// <summary>
/// Deletes the specified user.
/// </summary>
/// <param name="user">The user to be deleted.</param>
void DeleteUser(User user);
/// <param name="userId">The if of the user to be deleted.</param>
void DeleteUser(Guid userId);
/// <summary>
/// Resets the password.

Loading…
Cancel
Save