Bug 12080: restore effect of superserials permission
authorFrédéric Demians <f.demians@tamil.fr>
Tue, 15 Apr 2014 08:10:07 +0000 (10:10 +0200)
committerGalen Charlton <gmc@esilibrary.com>
Fri, 18 Apr 2014 20:45:59 +0000 (20:45 +0000)
The superserials permission is meant to allow an operator
to see all subscriptions regardless of branch when IndependentBranches
is on without having to have full superlibrarian permissions.  This
patch restores this behavior.

TEST PLAN
---------
1) Apply the patch for bug 12048 (as needed -- it may be pushed)
2) Ensure you have two users: superlibrarian, non-superlibrarian
   with all access to the staff client except superserials.
3) Ensure you have serials belonging to a different branch than
   the non-superlibrarian.
3) Log into staff client as superlibrarian
4) Click 'Serials'
5) Click the 'Submit' button in the search area.
   -- note the number of results.
6) Log into staff client as non-superlibrarian
7) Click 'Serials'
8) Click the 'Submit' button in the search area.
   -- note the number should be less, note the number.
9) Give the non-superlibrarian superserials access.
10) Home -> Serials
11) Click the 'Submit' button in the search area.
   -- the number will still be the same at the one in step #8.
12) Apply the patch
13) Refresh the page
   -- the number should now match the one in step #5.

Signed-off-by: Mark Tompsett <mtompset@hotmail.com>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
Signed-off-by: Galen Charlton <gmc@esilibrary.com>

C4/Serials.pm

index 2b7fd51..9fc9ad8 100644 (file)
@@ -736,12 +736,20 @@ sub SearchSubscriptions {
     my $results = $sth->fetchall_arrayref( {} );
     $sth->finish;
 
+    my $cant_display_other_branches = 0;
+    if (my $env = C4::Context->userenv) {
+        my $userid = $env->{'id'};
+        $cant_display_other_branches =
+            C4::Context->preference('IndependentBranches') &&
+            !C4::Context->IsSuperLibrarian() &&
+            !C4::Auth::haspermission( $userid, {serials => 'superserials'});
+    }
+    my $user_branch = C4::Context->userenv->{'branch'};
     for my $subscription ( @$results ) {
         $subscription->{cannotedit} = not can_edit_subscription( $subscription );
         $subscription->{cannotdisplay} =
-            ( C4::Context->preference("IndependentBranches") &&
-              (!C4::Context->IsSuperLibrarian()) &&
-              $subscription->{branchcode} ne C4::Context->userenv->{'branch'} ) ? 1 : 0;
+            $cant_display_other_branches &&
+            $subscription->{branchcode} ne $user_branch;
     }
 
     return @$results;