Explorar el Código

Fix user deletion.

Patrick Barron hace 5 años
padre
commit
9a01cd8590

+ 14 - 5
Jellyfin.Server.Implementations/Users/UserManager.cs

@@ -192,15 +192,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 ArgumentNullException(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 +226,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));

+ 2 - 9
MediaBrowser.Api/UserService.cs

@@ -365,15 +365,8 @@ namespace MediaBrowser.Api
 
 
         public Task DeleteAsync(DeleteUser request)
         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;
             return Task.CompletedTask;
         }
         }
 
 

+ 2 - 2
MediaBrowser.Controller/Library/IUserManager.cs

@@ -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>
-        void DeleteUser(User user);
+        /// <param name="userId">The if of the user to be deleted.</param>
+        void DeleteUser(Guid userId);
 
 
         /// <summary>
         /// <summary>
         /// Resets the password.
         /// Resets the password.