Skip to content
Snippets Groups Projects
Commit dd3ef36c authored by Alex Arnaud's avatar Alex Arnaud
Browse files

dev#189214 : Admin : search users according to own managed libraries

parent e2458abb
No related merge requests found
This commit is part of merge request !5001. Comments created here will be created in the context of that merge request.
......@@ -55,28 +55,57 @@ class Class_User_SearchCriteriaLibrary extends Class_SearchCriteria_Select {
protected string $_name = 'id_site';
public function buildElement() : ?Zend_Form_Element {
return $this->_isAdminBib()
? null
: (parent::buildElement()
->setLabel($this->_('Bibliothèque'))
->setMultiOptions(['all' => $this->_('Toutes')] + Class_Bib::findAllLabels()));
$labels = ($this->_isModoPortailOrMore())
? Class_Bib::findAllLabels()
: $this->_getManagedLibraries();
return ($labels)
? parent::buildElement()->setLabel($this->_('Bibliothèque'))
->setMultiOptions(['all' => $this->_('Toutes')] + $labels)
: null;
}
public function acceptSearchVisitor($visitor) : Class_SearchCriteria_Abstract {
if ( ! $this->_isAdminBib())
if ( ! $this->_isAdminBib() && ! $this->_isRedacteurBib() )
return parent::acceptSearchVisitor($visitor);
$visitor->addQueryClause(fn($query) => $query->eq($this->_name,
Class_Users::getIdentity()->getIdSite()));
$visitor->addQueryClause(fn($query) => $query
->in($this->_name,
Class_Users::getIdentity()->managedLibraries()));
return $this;
}
protected function _getManagedLibraries(): array
{
$libraries = [];
foreach (Class_Bib::query()
->in('id_site', Class_Users::getIdentity()->managedLibraries())
->order_desc('libelle')
->fetchAll() as $library)
$libraries[$library->getId()] = $library->getLibelle();
return $libraries;
}
protected function _isModoPortailOrMore(): bool
{
return ($user = Class_Users::getIdentity()) && $user->isModoPortailOrMore();
}
protected function _isAdminBib() : bool {
return ($user = Class_Users::getIdentity()) && $user->isAdminBib();
}
protected function _isRedacteurBib(): bool
{
return ($user = Class_Users::getIdentity()) && $user->isRedacteurBib();
}
}
......
......@@ -161,3 +161,372 @@ class UsersControllerManagedLibrariesPostAdminTest extends AbstractControllerTes
$this->assertEquals('3;5;31', Class_Users::findFirstBy(['idabon' => '3444'])->getManagedLibraries());
}
}
abstract class UsersControllerManagedLibrariesIndexTest
extends Admin_AbstractControllerTestCase {
public function setUp()
{
parent::setUp();
$this->fixture(Class_Bib::class,
['id' => 1,
'libelle' => 'Guéret']);
$this->fixture(Class_Bib::class,
['id' => 2,
'libelle' => 'Aubusson']);
$this->fixture(Class_Bib::class,
['id' => 3,
'libelle' => 'Felletin']);
$this->fixture(Class_Users::class,
['id' => 10,
'idabon' => '65656',
'login' => 'user_from_gueret',
'password' => 'secret',
'id_site' => 1,
'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
'last_login' => 0]);
$this->fixture(Class_Users::class,
['id' => 11,
'idabon' => '65657',
'login' => 'user_from_aubusson',
'password' => 'secret',
'id_site' => 2,
'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
'last_login' => 0]);
$this->fixture(Class_Users::class,
['id' => 12,
'idabon' => '65658',
'login' => 'user_from_felletin',
'password' => 'secret',
'id_site' => 3,
'role_level' => ZendAfi_Acl_AdminControllerRoles::ABONNE_SIGB,
'last_login' => 0]);
ZendAfi_Auth::getInstance()->logUser($this->_getLoggedUser());
$this->dispatch('/admin/users');
}
protected function _createLoggedUser(): Class_Users
{
return $this->fixture(Class_Users::class,
['id' => 1,
'login' => 'logged_in',
'password' => 'secret',
'id_site' => 1,
'managed_libraries' => '',
'role_level' => '',
'last_login' => 0]);
}
protected function _getLoggedUser(): Class_Users
{
return $this->_createLoggedUser();
}
}
class UsersControllerManagedLibrariesIndexModoBibManageGueretTest
extends UsersControllerManagedLibrariesIndexTest {
protected function _getLoggedUser(): Class_Users
{
$group = $this->fixture(Class_UserGroup::class,
['id' => 28,
'libelle' => 'Rédacteur Bib',
'rights' => [Class_UserGroup::RIGHT_USER_SIGB_USER_READ]]);
return $this->_createLoggedUser()
->setManagedLibraries('1')
->addUserGroup($group)
->setRoleLevel(ZendAfi_Acl_AdminControllerRoles::MODO_BIB);
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromGueret() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_gueret"]');
}
/** @test */
public function usersTableShouldNotContainIdentifiantUserFromAubusson() {
$this->assertNotXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_aubusson"]');
}
/** @test */
public function usersTableShouldNotContainIdentifiantUserFromFelletin() {
$this->assertNotXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_felletin"]');
}
/** @test */
public function librarySelectorShouldContainGueret()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="1"]');
}
/** @test */
public function librarySelectorShouldNotContainAubusson()
{
$this->assertNotXPath('//select[@name="search_id_site"]/option[@value="2"]');
}
/** @test */
public function librarySelectorShouldNotContainFelletin()
{
$this->assertNotXPath('//select[@name="search_id_site"]/option[@value="3"]');
}
}
class UsersControllerManagedLibrariesIndexAdminBibManageAubussonFelletinTest
extends UsersControllerManagedLibrariesIndexTest {
protected function _getLoggedUser(): Class_Users
{
$group = $this->fixture(Class_UserGroup::class,
['id' => 28,
'libelle' => 'Admin Bib',
'rights' => [Class_UserGroup::RIGHT_USER_SIGB_USER_READ]]);
return $this->_createLoggedUser()
->setManagedLibraries('2;3')
->addUserGroup($group)
->setRoleLevel(ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB);
}
/** @test */
public function usersTableShouldNotContainIdentifiantUserFromGueret() {
$this->assertNotXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_gueret"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromAubusson() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_aubusson"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromFelletin() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_felletin"]');
}
/** @test */
public function librarySelectorShouldNotContainGueret()
{
$this->assertNotXPath('//select[@name="search_id_site"]/option[@value="1"]');
}
/** @test */
public function librarySelectorShouldContainAubusson()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="2"]');
}
/** @test */
public function librarySelectorShouldContainFelletin()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="3"]');
}
}
class UsersControllerManagedLibrariesIndexModoPortailManageAubussonFelletinTest
extends UsersControllerManagedLibrariesIndexTest {
protected function _getLoggedUser(): Class_Users
{
$group = $this->fixture(Class_UserGroup::class,
['id' => 28,
'libelle' => 'Admin Bib',
'rights' => [Class_UserGroup::RIGHT_USER_SIGB_USER_READ]]);
return $this->_createLoggedUser()
->setManagedLibraries('2;3')
->addUserGroup($group)
->setRoleLevel(ZendAfi_Acl_AdminControllerRoles::MODO_PORTAIL);
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromGueret() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_gueret"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromAubusson() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_aubusson"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromFelletin() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_felletin"]');
}
/** @test */
public function librarySelectorShouldNotContainGueret()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="1"]');
}
/** @test */
public function librarySelectorShouldContainAubusson()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="2"]');
}
/** @test */
public function librarySelectorShouldContainFelletin()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="3"]');
}
}
class UsersControllerManagedLibrariesIndexAdminPortailManageGueretTest
extends UsersControllerManagedLibrariesIndexTest {
protected function _getLoggedUser(): Class_Users
{
$group = $this->fixture(Class_UserGroup::class,
['id' => 28,
'libelle' => 'Admin Bib',
'rights' => [Class_UserGroup::RIGHT_USER_SIGB_USER_READ]]);
return $this->_createLoggedUser()
->setManagedLibraries('1')
->addUserGroup($group)
->setRoleLevel(ZendAfi_Acl_AdminControllerRoles::ADMIN_PORTAIL);
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromGueret() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_gueret"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromAubusson() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_aubusson"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromFelletin() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_felletin"]');
}
/** @test */
public function librarySelectorShouldNotContainGueret()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="1"]');
}
/** @test */
public function librarySelectorShouldContainAubusson()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="2"]');
}
/** @test */
public function librarySelectorShouldContainFelletin()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="3"]');
}
}
class UsersControllerManagedLibrariesIndexSuperAdminTest
extends UsersControllerManagedLibrariesIndexTest {
protected function _getLoggedUser(): Class_Users
{
$group = $this->fixture(Class_UserGroup::class,
['id' => 28,
'libelle' => 'Admin Bib',
'rights' => [Class_UserGroup::RIGHT_USER_SIGB_USER_READ]]);
return $this->_createLoggedUser()
->addUserGroup($group)
->setRoleLevel(ZendAfi_Acl_AdminControllerRoles::SUPER_ADMIN);
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromGueret() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_gueret"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromAubusson() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_aubusson"]');
}
/** @test */
public function usersTableShouldContainIdentifiantUserFromFelletin() {
$this->assertXPath('//table[@id="users_table"]/tbody/tr/td[text()="user_from_felletin"]');
}
/** @test */
public function librarySelectorShouldNotContainGueret()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="1"]');
}
/** @test */
public function librarySelectorShouldContainAubusson()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="2"]');
}
/** @test */
public function librarySelectorShouldContainFelletin()
{
$this->assertXPath('//select[@name="search_id_site"]/option[@value="3"]');
}
}
......@@ -76,6 +76,7 @@ class UsersControllerRolesAdminBibTest
'password' => 'ro',
'mail' => 'toto@ro.com',
'id_site' => 1,
'managed_libraries' => '1;2',
'role_level' => ZendAfi_Acl_AdminControllerRoles::ADMIN_BIB,
'last_login' => 0]);
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment