‪TYPO3CMS  ‪main
PagePermissionRestrictionTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\Test;
24 
26 {
30  protected function ‪getPreparedUserAspect(bool $isLoggedIn, bool $isAdmin, int $userId, array $groupIds): ‪UserAspect
31  {
32  return new class ($isLoggedIn, $isAdmin, $userId, $groupIds) extends ‪UserAspect {
33  private $isAdmin;
34  private $isLoggedIn;
35  private $userId;
36  private $groupIds;
37  public function __construct(bool $isLoggedIn, bool $isAdmin, int $userId, array $groupIds)
38  {
39  $this->isLoggedIn = $isLoggedIn;
40  $this->isAdmin = $isAdmin;
41  $this->userId = $userId;
42  $this->groupIds = $groupIds;
43  }
44  public function isAdmin(): bool
45  {
46  return $this->isAdmin;
47  }
48  public function isLoggedIn(): bool
49  {
50  return $this->isLoggedIn;
51  }
52  public function get($name): int
53  {
54  if ($name === 'id') {
55  return $this->userId;
56  }
57  return parent::get($name);
58  }
59  public function getGroupIds(): array
60  {
61  return $this->groupIds;
62  }
63  };
64  }
65 
66  #[Test]
68  {
69  $aspect = $this->‪getPreparedUserAspect(true, false, 2, [13]);
71  $expression = $subject->buildExpression(['pages' => 'pages'], $this->expressionBuilder);
72  self::assertNotEmpty((string)$expression);
73  $expression = $subject->buildExpression(['anotherTable' => 'anotherTable'], $this->expressionBuilder);
74  self::assertEmpty((string)$expression);
75  }
76 
77  #[Test]
79  {
80  $aspect = $this->‪getPreparedUserAspect(false, false, 2, [13]);
82  $expression = $subject->buildExpression(['pages' => 'pages'], $this->expressionBuilder);
83  self::assertSame('1 = 0', (string)$expression);
84  }
85 
86  #[Test]
88  {
89  $aspect = $this->‪getPreparedUserAspect(true, true, 2, [13]);
91  $expression = $subject->buildExpression(['pages' => 'pages'], $this->expressionBuilder);
92  self::assertEmpty((string)$expression);
93  }
94 
95  #[Test]
97  {
98  $aspect = $this->‪getPreparedUserAspect(true, false, 2, [13, 14, 15, 16]);
100  $expression = $subject->buildExpression(['pages' => 'pages'], $this->expressionBuilder);
101  self::assertEquals('(("pages"."perms_everybody" & 1 = 1) OR ((("pages"."perms_userid" = 2) AND ("pages"."perms_user" & 1 = 1))) OR ((("pages"."perms_groupid" IN (13, 14, 15, 16)) AND ("pages"."perms_group" & 1 = 1))))', (string)$expression);
102  }
103 
104  #[Test]
106  {
107  $aspect = $this->‪getPreparedUserAspect(true, false, 42, [13, 14, 15, 16]);
109  $expression = $subject->buildExpression(['pages' => 'pages'], $this->expressionBuilder);
110  self::assertEquals('(("pages"."perms_everybody" & 4 = 4) OR ((("pages"."perms_userid" = 42) AND ("pages"."perms_user" & 4 = 4))) OR ((("pages"."perms_groupid" IN (13, 14, 15, 16)) AND ("pages"."perms_group" & 4 = 4))))', (string)$expression);
111  }
112 }
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\PagePermissionRestrictionTest\buildRestrictionsOnlyWorksOnPagesTable
‪buildRestrictionsOnlyWorksOnPagesTable()
Definition: PagePermissionRestrictionTest.php:67
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\PagePermissionRestrictionTest\buildRestrictionsReturnsAZeroReturnSetWhenNotLoggedIn
‪buildRestrictionsReturnsAZeroReturnSetWhenNotLoggedIn()
Definition: PagePermissionRestrictionTest.php:78
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\PagePermissionRestrictionTest\getPreparedUserAspect
‪getPreparedUserAspect(bool $isLoggedIn, bool $isAdmin, int $userId, array $groupIds)
Definition: PagePermissionRestrictionTest.php:30
‪TYPO3\CMS\Core\Type\Bitmask\Permission
Definition: Permission.php:26
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\PagePermissionRestrictionTest
Definition: PagePermissionRestrictionTest.php:26
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction
Definition: AbstractRestrictionContainerTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\AbstractRestrictionTestCase
Definition: AbstractRestrictionTestCase.php:27
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\PagePermissionRestrictionTest\buildRestrictionsContainsNonAdminUserIdAsOwnerAndGroupIdsAsOwnerGroup
‪buildRestrictionsContainsNonAdminUserIdAsOwnerAndGroupIdsAsOwnerGroup()
Definition: PagePermissionRestrictionTest.php:96
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\PagePermissionRestrictionTest\buildRestrictionsChecksForDeletionPermission
‪buildRestrictionsChecksForDeletionPermission()
Definition: PagePermissionRestrictionTest.php:105
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_SHOW
‪const PAGE_SHOW
Definition: Permission.php:35
‪TYPO3\CMS\Core\Database\Query\Restriction\PagePermissionRestriction
Definition: PagePermissionRestriction.php:42
‪TYPO3\CMS\Core\Tests\Unit\Database\Query\Restriction\PagePermissionRestrictionTest\buildRestrictionsIsSkippedForAdmins
‪buildRestrictionsIsSkippedForAdmins()
Definition: PagePermissionRestrictionTest.php:87
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_DELETE
‪const PAGE_DELETE
Definition: Permission.php:45
‪TYPO3\CMS\Core\Context\UserAspect
Definition: UserAspect.php:37