From c5808a4fdc44d868b1cfa735ab87a28a5c589a2e Mon Sep 17 00:00:00 2001 From: Linus Gasser Date: Mon, 13 Oct 2025 08:20:59 +0200 Subject: [PATCH] Allowing to delete users --- app/controllers/admin/users_controller.rb | 8 ++++++++ app/datatables/user_datatable.rb | 2 ++ app/views/admin/users/index.html.haml | 15 +++++++++++---- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 9820cef1..7e842146 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -65,6 +65,14 @@ module Admin def edit; end + def destroy + if @user.destroy + redirect_to admin_users_path, notice: "User #{@user.name} (#{@user.email}) was successfully deleted." + else + redirect_to admin_users_path, error: "Could not delete user #{@user.name} (#{@user.email}). #{@user.errors.full_messages.join('. ')}." + end + end + private def user_params diff --git a/app/datatables/user_datatable.rb b/app/datatables/user_datatable.rb index 8ee1acb6..4a87f5e5 100644 --- a/app/datatables/user_datatable.rb +++ b/app/datatables/user_datatable.rb @@ -7,6 +7,7 @@ class UserDatatable < AjaxDatatablesRails::ActiveRecord def_delegator :@view, :show_roles def_delegator :@view, :admin_user_path def_delegator :@view, :edit_admin_user_path + def_delegator :@view, :can? def initialize(params, opts = {}) @view = opts[:view_context] @@ -40,6 +41,7 @@ class UserDatatable < AjaxDatatablesRails::ActiveRecord roles: record.roles.any? ? show_roles(record.get_roles) : 'None', view_url: admin_user_path(record), edit_url: edit_admin_user_path(record), + delete_url: can?(:destroy, record) ? admin_user_path(record) : nil, DT_RowId: dom_id(record) } end diff --git a/app/views/admin/users/index.html.haml b/app/views/admin/users/index.html.haml index 2556f090..aa8f8576 100644 --- a/app/views/admin/users/index.html.haml +++ b/app/views/admin/users/index.html.haml @@ -66,10 +66,17 @@ "className": "actions", "sortable": false, "render": function (data, type, row, meta) { - return '
'+ - 'View'+ - 'Edit'+ - '
'; + var buttons = '
'+ + 'View'+ + 'Edit'; + if (row.delete_url) { + buttons += 'Delete'; + } + buttons += '
'; + return buttons; } } ]