Skip to content

Commit 8b761f7

Browse files
authored
fix(delete user): add error message when a user tries to delete an admin (#145)
The role needs to be changed before deletion.
1 parent f297af3 commit 8b761f7

File tree

4 files changed

+15
-6
lines changed

4 files changed

+15
-6
lines changed

internal/core/auth/errors.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ var ErrUserNotFound = errors.New("user not found")
66
var ErrUserAlreadyExists = errors.New("user already exists")
77
var ErrUserInvalidCredentials = errors.New("invalid credentials")
88
var ErrUserInvalidRole = errors.New("invalid role")
9+
var ErrUserAdminCannotBeDeleted = errors.New("admin user cannot be deleted; change role before deletion")
910
var ErrInvalidToken = errors.New("invalid token")

internal/core/auth/user_service.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ func (s *UserService) DeleteUser(id string) error {
181181
}
182182
// Check if user is admin
183183
if user.HasRole(RoleAdmin) {
184-
return ErrUserInvalidRole
184+
return ErrUserAdminCannotBeDeleted
185185
}
186186
// Delete user from store
187187
err = s.store.DeleteUser(id)

internal/core/auth/user_service_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ func TestUserService_DeleteUser(t *testing.T) {
9292
// admin should not be deletable
9393
admin, _ := service.CreateUser("admin", "admin@example.com", "secret", "admin")
9494
err := service.DeleteUser(admin.ID)
95-
if err != ErrUserInvalidRole {
96-
t.Errorf("Expected ErrUserInvalidRole when deleting admin, got: %v", err)
95+
if err != ErrUserAdminCannotBeDeleted {
96+
t.Errorf("Expected ErrUserAdminCannotBeDeleted when deleting admin, got: %v", err)
9797
}
9898

9999
editor, _ := service.CreateUser("editor", "editor@example.com", "secret", "editor")

ui/leafwiki-ui/src/features/users/DeleteUserButton.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import { useAuthStore } from '@/stores/auth'
1313
import { useUserStore } from '@/stores/users'
1414
import { AlertDialogDescription } from '@radix-ui/react-alert-dialog'
1515
import { useState } from 'react'
16+
import { toast } from 'sonner'
1617

1718
type Props = {
1819
userId: string
@@ -33,9 +34,16 @@ export function DeleteUserButton({ userId, username }: Props) {
3334
try {
3435
await deleteUser(userId)
3536
setOpen(false)
36-
} catch (err) {
37-
console.error('Error deleting user:', err)
38-
// Optionally show an error message to the user
37+
} catch (err: { error?: string } | unknown) {
38+
if (err && typeof err === 'object' && 'error' in err) {
39+
// Handle specific error message if available
40+
console.error('Error deleting user:', (err as { error: string }).error)
41+
toast.error(err.error as string)
42+
} else {
43+
// Handle generic error
44+
console.error('Error deleting user:', err)
45+
toast.error('Failed to delete user. Please try again.')
46+
}
3947
} finally {
4048
setLoading(false)
4149
}

0 commit comments

Comments
 (0)