diff --git a/FoodsharingSiegen.Server/Data/Service/UserService.cs b/FoodsharingSiegen.Server/Data/Service/UserService.cs
index 5b4b7f6..4937a16 100644
--- a/FoodsharingSiegen.Server/Data/Service/UserService.cs
+++ b/FoodsharingSiegen.Server/Data/Service/UserService.cs
@@ -105,6 +105,13 @@ namespace FoodsharingSiegen.Server.Data.Service
var user = await Context.Users!.Include(x => x.Interactions).FirstOrDefaultAsync(x => x.Id == userId);
if (user == null) return new(new Exception("User not found"));
+ if (user.Type == UserType.Admin)
+ {
+ var adminCount = await Context.Users!.CountAsync(x => x.Type == UserType.Admin && x.Id != userId);
+ if (adminCount == 0)
+ return new(new Exception("Der letzte Administrator kann nicht gelöscht werden."));
+ }
+
// Interaktionen vom aktuellen Nutzer übernehmen
if(CurrentUser?.Id != null)
foreach (var userInteraction in user.Interactions)
@@ -184,6 +191,13 @@ namespace FoodsharingSiegen.Server.Data.Service
var entityUser = await Context.Users!.FirstOrDefaultAsync(x => x.Id == user.Id);
if (entityUser == null) return new(new Exception("User not found"));
+ if (entityUser.Type == UserType.Admin && user.Type != UserType.Admin)
+ {
+ var adminCount = await Context.Users!.CountAsync(x => x.Type == UserType.Admin && x.Id != user.Id);
+ if (adminCount == 0)
+ return new(new Exception("Der Typ des letzten Administrators kann nicht geändert werden."));
+ }
+
if (entityUser.Mail != user.Mail ||
entityUser.Type != user.Type ||
entityUser.Groups != user.Groups)
diff --git a/FoodsharingSiegen.Server/Pages/Users.razor b/FoodsharingSiegen.Server/Pages/Users.razor
index 1fabec4..dfeddb8 100644
--- a/FoodsharingSiegen.Server/Pages/Users.razor
+++ b/FoodsharingSiegen.Server/Pages/Users.razor
@@ -55,13 +55,13 @@
-
-
-
-
+ @if (!(user.Type == UserType.Admin && SortedUsers.Count(x => x.Type == UserType.Admin) <= 1))
+ {
+
+ }
}
@@ -105,12 +105,16 @@
Typ
-
Gruppen
diff --git a/FoodsharingSiegen.Server/Pages/Users.razor.cs b/FoodsharingSiegen.Server/Pages/Users.razor.cs
index f487841..f9b1e2b 100644
--- a/FoodsharingSiegen.Server/Pages/Users.razor.cs
+++ b/FoodsharingSiegen.Server/Pages/Users.razor.cs
@@ -57,6 +57,11 @@ namespace FoodsharingSiegen.Server.Pages
///
private bool IsEditing { get; set; }
+ ///
+ /// Gets a value indicating whether the current editing user is the last admin
+ ///
+ private bool IsLastAdmin => IsEditing && EditModel?.Type == UserType.Admin && UserList?.Count(x => x.Type == UserType.Admin) <= 1;
+
///
/// Gets the value of the user groups (ab)
///
@@ -184,12 +189,6 @@ namespace FoodsharingSiegen.Server.Pages
/// A task that represents the asynchronous remove operation.
private async Task RemoveUserAsync(User user)
{
- if (user.IsAdmin())
- {
- await Notification.Error("Admins können nicht gelöscht werden!");
- return;
- }
-
await ConfirmDialog.ShowAsync(ModalService, "Bestätigen", $"User {user.Mail} löschen?", async () =>
{
var removeR = await UserService.RemoveAsync(user.Id);