From 174624a8133ca8034c5eecf6172fbc8a078900c7 Mon Sep 17 00:00:00 2001
From: Henri-Damien LAURENT <hdlaurent@afi-sa.fr>
Date: Fri, 15 Jul 2022 14:52:29 +0200
Subject: [PATCH] Fixing permissions for users RedacPortail having library set

---
 .../admin/controllers/CmsController.php       |  2 +-
 library/Class/Bib.php                         |  2 +-
 .../Action/Helper/ListViewMode/Article.php    |  3 +-
 .../controllers/CmsControllerListModeTest.php | 85 ++++++++++++++++++-
 4 files changed, 88 insertions(+), 4 deletions(-)

diff --git a/application/modules/admin/controllers/CmsController.php b/application/modules/admin/controllers/CmsController.php
index 2ef7edf2824..f457ede4d0d 100644
--- a/application/modules/admin/controllers/CmsController.php
+++ b/application/modules/admin/controllers/CmsController.php
@@ -39,7 +39,7 @@ class Admin_CmsController extends ZendAfi_Controller_Action {
 
   protected function _renderList() {
     $bibs = Class_Bib::findAllForCurrentUserAndPortal();
-    $current_library = ($this->identity->isAdmin())
+    $current_library = (Class_Users::isCurrentUserCanAccessAllBibs())
       ? null
       : $this->identity->getBib();
 
diff --git a/library/Class/Bib.php b/library/Class/Bib.php
index c4249991999..780d919ad38 100644
--- a/library/Class/Bib.php
+++ b/library/Class/Bib.php
@@ -285,7 +285,7 @@ class BibLoader extends Storm_Model_Loader {
 
 
   protected function _findAllForCurrentUser() : array {
-    return (! Class_Users::isCurrentUserAdmin()) && ($user_library = Class_Users::getIdentity()->getBib())
+    return (! Class_Users::isCurrentUserCanAccessAllBibs()) && ($user_library = Class_Users::getIdentity()->getBib())
       ? [$user_library]
       : Class_Bib::findAllBy(['order' => 'libelle']);
   }
diff --git a/library/ZendAfi/Controller/Action/Helper/ListViewMode/Article.php b/library/ZendAfi/Controller/Action/Helper/ListViewMode/Article.php
index 5f9ee72b310..1130b5a94b4 100644
--- a/library/ZendAfi/Controller/Action/Helper/ListViewMode/Article.php
+++ b/library/ZendAfi/Controller/Action/Helper/ListViewMode/Article.php
@@ -315,7 +315,8 @@ class ZendAfi_Controller_Action_Helper_ListViewMode_Article
                     'label' => $this->getBibLabel(),
                     'options' => []]];
 
-    if ($bib = $this->getParam('bib'))
+    if (! Class_Users::isCurrentUserCanAccessAllBibs()
+        && $bib = $this->getParam('bib'))
       $breadcrumb = [['url' => ['module' => 'admin',
                                 'controller' => 'cms',
                                 'action' => 'index'],
diff --git a/tests/application/modules/admin/controllers/CmsControllerListModeTest.php b/tests/application/modules/admin/controllers/CmsControllerListModeTest.php
index bf1f18e688f..bf4e44cd744 100644
--- a/tests/application/modules/admin/controllers/CmsControllerListModeTest.php
+++ b/tests/application/modules/admin/controllers/CmsControllerListModeTest.php
@@ -73,7 +73,7 @@ class CmsControllerListModeAdminRootTest extends CmsControllerListModeTestCase {
 
 
 
-class CmsControllerListModeModoPortailInPortailTest extends CmsControllerListModeTestCase {
+class CmsControllerListModeModoPortailAndNoLibraryInPortailTest extends CmsControllerListModeTestCase {
   public function setUp() {
     parent::setUp();
     $this->_bernard->beModoPortail()->setBib(null);
@@ -91,6 +91,89 @@ class CmsControllerListModeModoPortailInPortailTest extends CmsControllerListMod
 
 
 
+class CmsControllerListModeModoPortailIndexTest extends CmsControllerListModeTestCase {
+  public function setUp() {
+    parent::setUp();
+    $this->_bernard->beModoPortail();
+    ZendAfi_Auth::getInstance()->logUser($this->_bernard);
+    $this->dispatch('/admin/cms');
+  }
+
+
+  /** @test */
+  public function shouldDisplayPortailCategory() {
+    $this->assertXPathContentContains('//td/a[@href="/admin/cms/index/id_bib/0"]',
+                                      'Portail');
+  }
+
+
+  /** @test */
+  public function shouldDisplayAnnecyCategory() {
+    $this->assertXPathContentContains('//td/a[@href="/admin/cms/index/id_bib/1"]',
+                                      'Annecy');
+  }
+
+
+  /** @test */
+  public function shouldDisplayCranGevrierCategory() {
+    $this->assertXPathContentContains('//td/a[@href="/admin/cms/index/id_bib/3"]',
+                                      'Cran-Gevrier');
+  }
+}
+
+
+
+
+class CmsControllerListModeModoPortailPortailCategoryEditTest extends CmsControllerListModeTestCase {
+  public function setUp() {
+    parent::setUp();
+    $this->_bernard->beModoPortail();
+    ZendAfi_Auth::getInstance()->logUser($this->_bernard);
+    $this->dispatch('/admin/cms/index/id_bib/0');
+  }
+
+
+  /** @test */
+  public function breadcrumbShouldDisplayRacine() {
+    $this->assertXPathContentContains('//div[@class="breadcrumb"]//a[@href="/admin/cms"]',
+                                      'Racine', $this->_response->getBody());
+  }
+
+
+  /** @test */
+  public function breadcrumbShouldDisplayPortail() {
+    $this->assertXPathContentContains('//div[@class="breadcrumb"]/a[contains(@href,"id_bib/0")]',
+                                      'Portail');
+  }
+}
+
+
+
+
+class CmsControllerListModeModoPortailInAnnecyTest extends CmsControllerListModeTestCase {
+  public function setUp() {
+    parent::setUp();
+    $this->_bernard->beModoPortail();
+    ZendAfi_Auth::getInstance()->logUser($this->_bernard);
+    $this->dispatch('/admin/cms/index/id_bib/1');
+  }
+
+  /** @test */
+  public function breadCrumbShouldDisplayRacine() {
+    $this->assertXPathContentContains('//div[contains(@class, "breadcrumb")]//a[@href= "/admin/cms"]',
+                                      'Racine');
+  }
+
+  /** @test */
+  public function breadCrumbShouldDisplayAnnecy() {
+    $this->assertXPathContentContains('//div[contains(@class, "breadcrumb")]//a[contains(@href, "id_bib/1")]',
+                                      'Annecy');
+  }
+}
+
+
+
+
 class CmsControllerListModeAdminBibRootTest extends CmsControllerListModeTestCase {
 
   public function setUp() {
-- 
GitLab