From e54d4ba96bd3d98f87065f8242ed2524dca95e89 Mon Sep 17 00:00:00 2001
From: Tomas Cohen Arazi <tomascohen@theke.io>
Date: Wed, 7 Feb 2024 11:06:32 -0300
Subject: [PATCH] Bug 31791: Limit editing locked records

Sponsored-by: ByWater Solutions
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
---
 cataloguing/addbiblio.pl | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl
index a340c6ebbfd..ca12f84d769 100755
--- a/cataloguing/addbiblio.pl
+++ b/cataloguing/addbiblio.pl
@@ -537,13 +537,22 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     }
 );
 
+my $logged_in_patron = Koha::Patrons->find($loggedinuser);
 my $biblio;
-if ($biblionumber){
+
+if ($biblionumber) {
+
     $biblio = Koha::Biblios->find($biblionumber);
-    unless ( $biblio ) {
+
+    unless ($biblio) {
         $biblionumber = undef;
         $template->param( bib_doesnt_exist => 1 );
     }
+
+    unless ( $biblio->can_be_edited($logged_in_patron) ) {
+        print $input->redirect("/cgi-bin/koha/errors/403.pl");    # escape early
+        exit;
+    }
 }
 
 if ($frameworkcode eq 'FA'){
@@ -645,15 +654,14 @@ if ($biblionumber) {
     $sth->execute($biblionumber);
     ($biblioitemnumber) = $sth->fetchrow;
     if (C4::Context->preference('MARCOverlayRules')) {
-        my $member = Koha::Patrons->find($loggedinuser);
         $record = ApplyMarcOverlayRules(
             {
                 biblionumber    => $biblionumber,
                 record          => $record,
                 overlay_context =>  {
                         source       => $z3950 ? 'z3950' : 'intranet',
-                        categorycode => $member->categorycode,
-                        userid       => $member->userid
+                        categorycode => $logged_in_patron->categorycode,
+                        userid       => $logged_in_patron->userid,
                 }
             }
         );
@@ -679,7 +687,6 @@ if ( $op eq "cud-addbiblio" ) {
     if ( !$duplicatebiblionumber or $confirm_not_duplicate ) {
         my $oldbibitemnum;
         if ( $is_a_modif ) {
-            my $member = Koha::Patrons->find($loggedinuser);
             ModBiblio(
                 $record,
                 $biblionumber,
@@ -687,8 +694,8 @@ if ( $op eq "cud-addbiblio" ) {
                 {
                     overlay_context => {
                         source       => $z3950 ? 'z3950' : 'intranet',
-                        categorycode => $member->categorycode,
-                        userid       => $member->userid
+                        categorycode => $logged_in_patron->categorycode,
+                        userid       => $logged_in_patron->userid,
                     }
                 }
             );
-- 
2.44.0