Bug 35830: Add merge_borrowers subpermission

Merging patrons only required edit_borrowers permission
but would result in a patron deletion.

This patch requires a new merge_borrowers subpermission

To test:
1. Give a patron the following permissions
    catalogue, edit_borrowers, list_borrowers
2. Log into the staff interface as the patron
3. Do a patron search and select 2 patrons
4. Click merge patron - success - a patron got deleted
5. Apply patch, updatedatabase and restart_all
6. Repeat steps 3 and 4 - you can't
7. Add the new permission for merge_borrowers
8. Repeat steps 3 and 4 - now you can
9. prove t/Koha/Auth/Patrons.t

Sponsored-by: CLAMS
Signed-off-by: Owen Leonard <oleonard@myacpl.org>
Signed-off-by: David Cook <dcook@prosentient.com.au>
Signed-off-by: wainuiwitikapark <wainuiwitikapark@catalyst.net.nz>
This commit is contained in:
Brendan Lawlor 2025-09-09 13:56:15 +00:00 committed by Wainui Witika-Park
parent 32e9471970
commit 8ca26c8a85
No known key found for this signature in database
GPG Key ID: 2D0A6AB5DAF1B78D
6 changed files with 37 additions and 5 deletions

View File

@ -0,0 +1,23 @@
use Modern::Perl;
return {
bug_number => "35830",
description => "Add permission borrowers:merge_borrowers",
up => sub {
my ($args) = @_;
my ( $dbh, $out ) = @$args{qw(dbh out)};
$dbh->do(
q{INSERT IGNORE INTO permissions (module_bit, code, description)
VALUES (4, 'merge_borrowers', 'Merge patrons')}
);
say $out "Added new permission 'merge_borrowers'";
$dbh->do(
q{INSERT INTO user_permissions (borrowernumber, module_bit, code) SELECT borrowernumber, module_bit, 'merge_borrowers' FROM user_permissions where module_bit = 4 and code = 'edit_borrowers';}
);
say $out "Added 'merge_borrowers' permission to existing users with 'edit_borrowers'";
},
};

View File

@ -44,6 +44,7 @@ INSERT INTO permissions (module_bit, code, description) VALUES
( 3, 'manage_identity_providers', 'Manage identity providers'),
( 4, 'delete_borrowers', 'Delete patrons'),
( 4, 'edit_borrowers', 'Add, modify and view patron information'),
( 4, 'merge_borrowers', 'Merge patrons'),
( 4, 'view_borrower_infos_from_any_libraries', 'View patron infos from any libraries'),
( 6, 'place_holds', 'Place holds for patrons'),
( 6, 'modify_holds_priority', 'Modify holds priority'),

View File

@ -296,6 +296,9 @@
Delete patrons
</span>
<span class="permissioncode">([% name | html %])</span>
[%- CASE 'merge_borrowers' -%]
<span class="sub_permission merge_borrowers_subpermission"> Merge patrons </span>
<span class="permissioncode">([% name | html %])</span>
[%- CASE 'edit_borrowers' -%]
<span class="sub_permission edit_borrowers_subpermission">
Add, modify and view patron information

View File

@ -58,7 +58,11 @@
|
<a href="#" class="btn btn-link" id="clear_all"><i class="fa fa-remove"></i> Clear all</a>
[% IF CAN_user_tools_manage_patron_lists %]
[% END %]
[% IF CAN_user_borrowers_merge_borrowers %]
<div class="btn-group">
<button id="merge-patrons" class="btn btn-default btn-sm disabled" disabled="disabled" type="submit"><i class="fa fa-compress" aria-hidden="true"></i> Merge selected patrons</button>
</div>
[% END %]
[% IF CAN_user_tools_manage_patron_lists %]

View File

@ -30,10 +30,10 @@ my $cgi = CGI->new;
my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user(
{
template_name => "members/merge-patrons.tt",
query => $cgi,
type => "intranet",
flagsrequired => { borrowers => 'edit_borrowers' },
template_name => "members/merge-patrons.tt",
query => $cgi,
type => "intranet",
flagsrequired => { borrowers => 'merge_borrowers' },
}
);

View File

@ -123,6 +123,7 @@ subtest 'superlibrarian tests' => sub {
'CAN_user_acquisition_vendors_manage' => 1,
'CAN_user_acquisition' => 1,
'CAN_user_borrowers_delete_borrowers' => 1,
'CAN_user_borrowers_merge_borrowers' => 1,
'CAN_user_borrowers_edit_borrowers' => 1,
'CAN_user_borrowers_view_borrower_infos_from_any_libraries' => 1,
'CAN_user_borrowers' => 1,