Merge pull request #3437 from barronpm/fix-user-delete

Fix User Deletion
This commit is contained in:
dkanada 2020-06-26 06:17:23 +09:00 committed by GitHub
commit d0bc93e947
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 16 deletions

View File

@ -12,6 +12,7 @@ using Jellyfin.Data.Entities;
using Jellyfin.Data.Enums; using Jellyfin.Data.Enums;
using MediaBrowser.Common; using MediaBrowser.Common;
using MediaBrowser.Common.Cryptography; using MediaBrowser.Common.Cryptography;
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.Net; using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Authentication; using MediaBrowser.Controller.Authentication;
using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Drawing;
@ -192,15 +193,15 @@ namespace Jellyfin.Server.Implementations.Users
} }
/// <inheritdoc/> /// <inheritdoc/>
public void DeleteUser(User user) public void DeleteUser(Guid userId)
{ {
var dbContext = _dbProvider.CreateContext();
var user = dbContext.Users.Find(userId);
if (user == null) if (user == null)
{ {
throw new ArgumentNullException(nameof(user)); throw new ResourceNotFoundException(nameof(userId));
} }
var dbContext = _dbProvider.CreateContext();
if (dbContext.Users.Find(user.Id) == null) if (dbContext.Users.Find(user.Id) == null)
{ {
throw new ArgumentException(string.Format( throw new ArgumentException(string.Format(
@ -226,9 +227,18 @@ namespace Jellyfin.Server.Implementations.Users
CultureInfo.InvariantCulture, CultureInfo.InvariantCulture,
"The user '{0}' cannot be deleted because there must be at least one admin user in the system.", "The user '{0}' cannot be deleted because there must be at least one admin user in the system.",
user.Username), 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.Users.Remove(user);
dbContext.SaveChanges(); dbContext.SaveChanges();
OnUserDeleted?.Invoke(this, new GenericEventArgs<User>(user)); OnUserDeleted?.Invoke(this, new GenericEventArgs<User>(user));

View File

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

View File

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