‪TYPO3CMS  11.5
DatabaseUserPermissionCheckTest.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 Prophecy\Argument;
21 use Prophecy\PhpUnit\ProphecyTrait;
22 use Prophecy\Prophecy\ObjectProphecy;
33 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
34 
38 class ‪DatabaseUserPermissionCheckTest extends UnitTestCase
39 {
40  use ProphecyTrait;
41 
43  protected ObjectProphecy ‪$beUserProphecy;
44 
45  protected function ‪setUp(): void
46  {
47  parent::setUp();
48  $this->beUserProphecy = $this->prophesize(BackendUserAuthentication::class);
49  ‪$GLOBALS['BE_USER'] = $this->beUserProphecy->reveal();
50  ‪$GLOBALS['BE_USER']->user['uid'] = 42;
51  }
52 
57  {
58  $this->beUserProphecy->isAdmin()->willReturn(true);
59 
60  $result = (new ‪DatabaseUserPermissionCheck())->addData([]);
61 
62  self::assertSame(‪Permission::ALL, $result['userPermissionOnPage']);
63  }
64 
69  {
70  $input = [
71  'tableName' => 'tt_content',
72  ];
73  $this->beUserProphecy->isAdmin()->willReturn(false);
74  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(false);
75 
76  $this->expectException(AccessDeniedTableModifyException::class);
77  $this->expectExceptionCode(1437683248);
78 
79  (new DatabaseUserPermissionCheck())->addData($input);
80  }
81 
86  {
87  $input = [
88  'tableName' => 'tt_content',
89  'command' => 'edit',
90  'vanillaUid' => 123,
91  'parentPageRow' => [
92  'uid' => 42,
93  'pid' => 321,
94  ],
95  ];
96  $this->beUserProphecy->isAdmin()->willReturn(false);
97  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
98  $this->beUserProphecy->calcPerms(['uid' => 42, 'pid' => 321])->willReturn(‪Permission::NOTHING);
99 
100  $this->expectException(AccessDeniedContentEditException::class);
101  $this->expectExceptionCode(1437679657);
102 
103  (new DatabaseUserPermissionCheck())->addData($input);
104  }
105 
110  {
111  $input = [
112  'tableName' => 'tt_content',
113  'command' => 'edit',
114  'vanillaUid' => 123,
115  'databaseRow' => [],
116  'parentPageRow' => [
117  'pid' => 321,
118  ],
119  ];
120  $this->beUserProphecy->isAdmin()->willReturn(false);
121  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
122  $this->beUserProphecy->calcPerms(['pid' => 321])->willReturn(‪Permission::CONTENT_EDIT);
123  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::any())->willReturn(true);
124 
125  $result = (new DatabaseUserPermissionCheck())->addData($input);
126 
127  self::assertSame(‪Permission::CONTENT_EDIT, $result['userPermissionOnPage']);
128  }
129 
134  {
135  $input = [
136  'tableName' => 'pages',
137  'command' => 'edit',
138  'vanillaUid' => 123,
139  'databaseRow' => [
140  'uid' => 123,
141  'pid' => 321,
142  ],
143  ];
144  $this->beUserProphecy->isAdmin()->willReturn(false);
145  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
146  $this->beUserProphecy->calcPerms($input['databaseRow'])->willReturn(‪Permission::NOTHING);
147 
148  $this->expectException(AccessDeniedPageEditException::class);
149  $this->expectExceptionCode(1437679336);
150 
151  (new DatabaseUserPermissionCheck())->addData($input);
152  }
153 
158  {
159  $input = [
160  'tableName' => 'pages',
161  'command' => 'edit',
162  'vanillaUid' => 123,
163  'databaseRow' => [
164  'uid' => 123,
165  'pid' => 321,
166  'doktype' => 1,
167  ],
168  'processedTca' => [
169  'ctrl' => [
170  'type' => 'doktype',
171  ],
172  ],
173  ];
174  $this->beUserProphecy->isAdmin()->willReturn(false);
175  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
176  $this->beUserProphecy->check('pagetypes_select', $input['databaseRow']['doktype'])->willReturn(false);
177  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
178  $this->beUserProphecy->calcPerms($input['databaseRow'])->willReturn(‪Permission::ALL);
179 
180  $this->expectException(AccessDeniedPageEditException::class);
181  $this->expectExceptionCode(1437679336);
182 
183  (new DatabaseUserPermissionCheck())->addData($input);
184  }
185 
190  {
191  $input = [
192  'tableName' => 'pages',
193  'command' => 'edit',
194  'vanillaUid' => 123,
195  'databaseRow' => [
196  'uid' => 123,
197  'pid' => 321,
198  'doktype' => 1,
199  ],
200  'processedTca' => [
201  'ctrl' => [
202  'type' => 'doktype',
203  ],
204  ],
205  ];
206  $this->beUserProphecy->isAdmin()->willReturn(false);
207  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
208  $this->beUserProphecy->check('pagetypes_select', $input['databaseRow']['doktype'])->willReturn(true);
209  $this->beUserProphecy->calcPerms($input['databaseRow'])->willReturn(‪Permission::PAGE_EDIT);
210  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
211 
212  $result = (new DatabaseUserPermissionCheck())->addData($input);
213 
214  self::assertSame(‪Permission::PAGE_EDIT, $result['userPermissionOnPage']);
215  }
216 
221  {
222  $input = [
223  'tableName' => 'tt_content',
224  'command' => 'edit',
225  'vanillaUid' => 123,
226  'databaseRow' => [
227  'uid' => 123,
228  'pid' => 0,
229  ],
230  ];
231  $this->beUserProphecy->isAdmin()->willReturn(false);
232  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
233  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
234  ‪$GLOBALS['TCA'][$input['tableName']]['ctrl']['security']['ignoreRootLevelRestriction'] = true;
235 
236  $result = (new DatabaseUserPermissionCheck())->addData($input);
237 
238  self::assertSame(‪Permission::ALL, $result['userPermissionOnPage']);
239  }
240 
245  {
246  $input = [
247  'tableName' => 'tt_content',
248  'command' => 'edit',
249  'vanillaUid' => 123,
250  'databaseRow' => [
251  'uid' => 123,
252  'pid' => 0,
253  ],
254  ];
255  $this->beUserProphecy->isAdmin()->willReturn(false);
256  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
257  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
258 
259  $this->expectException(AccessDeniedRootNodeException::class);
260  $this->expectExceptionCode(1437679856);
261 
262  (new DatabaseUserPermissionCheck())->addData($input);
263  }
264 
269  {
270  $input = [
271  'tableName' => 'tt_content',
272  'command' => 'edit',
273  'vanillaUid' => 123,
274  'databaseRow' => [],
275  'parentPageRow' => [
276  'uid' => 123,
277  'pid' => 321,
278  ],
279  ];
280  $this->beUserProphecy->isAdmin()->willReturn(false);
281  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
282  $this->beUserProphecy->calcPerms($input['parentPageRow'])->willReturn(‪Permission::ALL);
283  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(false);
284 
285  $this->expectException(AccessDeniedEditInternalsException::class);
286  $this->expectExceptionCode(1437687404);
287 
288  (new DatabaseUserPermissionCheck())->addData($input);
289  }
290 
295  {
296  $input = [
297  'tableName' => 'tt_content',
298  'command' => 'new',
299  'vanillaUid' => 123,
300  'parentPageRow' => [
301  'uid' => 123,
302  'pid' => 321,
303  ],
304  ];
305  $this->beUserProphecy->isAdmin()->willReturn(false);
306  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
307  $this->beUserProphecy->calcPerms($input['parentPageRow'])->willReturn(‪Permission::NOTHING);
308 
309  $this->expectException(AccessDeniedContentEditException::class);
310  $this->expectExceptionCode(1437745759);
311 
312  (new DatabaseUserPermissionCheck())->addData($input);
313  }
314 
319  {
320  $input = [
321  'tableName' => 'pages',
322  'command' => 'new',
323  'vanillaUid' => 123,
324  'databaseRow' => [
325  'uid' => 'NEW123',
326  ],
327  'parentPageRow' => [
328  'uid' => 123,
329  'pid' => 321,
330  ],
331  ];
332  $this->beUserProphecy->isAdmin()->willReturn(false);
333  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
334  $this->beUserProphecy->calcPerms($input['parentPageRow'])->willReturn(‪Permission::NOTHING);
335 
336  $this->expectException(AccessDeniedPageNewException::class);
337  $this->expectExceptionCode(1437745640);
338 
339  (new DatabaseUserPermissionCheck())->addData($input);
340  }
341 
345  public function ‪addDataThrowsExceptionIfHookDeniesAccess(): void
346  {
347  $input = [
348  'tableName' => 'tt_content',
349  'command' => 'edit',
350  'vanillaUid' => 123,
351  'databaseRow' => [
352  'uid' => 5,
353  ],
354  'parentPageRow' => [
355  'uid' => 123,
356  'pid' => 321,
357  ],
358  ];
359  $this->beUserProphecy->isAdmin()->willReturn(false);
360  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
361  $this->beUserProphecy->calcPerms($input['parentPageRow'])->willReturn(‪Permission::ALL);
362  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
363 
364  ‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/alt_doc.php']['makeEditForm_accessCheck'] = [
365  'unitTest' => static function () {
366  return false;
367  },
368  ];
369 
370  $this->expectException(AccessDeniedHookException::class);
371  $this->expectExceptionCode(1437689705);
372 
373  (new DatabaseUserPermissionCheck())->addData($input);
374  }
375 
380  {
381  $input = [
382  'tableName' => 'pages',
383  'command' => 'new',
384  'vanillaUid' => 123,
385  'databaseRow' => [
386  'uid' => 'NEW5',
387  ],
388  'parentPageRow' => [
389  'uid' => 123,
390  'pid' => 321,
391  ],
392  ];
393  $this->beUserProphecy->isAdmin()->willReturn(false);
394  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
395  $this->beUserProphecy->calcPerms($input['parentPageRow'])->willReturn(‪Permission::CONTENT_EDIT);
396  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
397 
398  ‪$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['typo3/alt_doc.php']['makeEditForm_accessCheck'] = [
399  'unitTest' => static function () {
400  return true;
401  },
402  ];
403 
404  $result = (new DatabaseUserPermissionCheck())->addData($input);
405 
406  self::assertSame(‪Permission::CONTENT_EDIT, $result['userPermissionOnPage']);
407  }
408 
412  public function ‪addDataSetsUserPermissionsOnPageForNewPage(): void
413  {
414  $input = [
415  'tableName' => 'pages',
416  'command' => 'new',
417  'vanillaUid' => 123,
418  'parentPageRow' => [
419  'uid' => 123,
420  'pid' => 321,
421  ],
422  ];
423  $this->beUserProphecy->isAdmin()->willReturn(false);
424  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
425  $this->beUserProphecy->calcPerms($input['parentPageRow'])->willReturn(‪Permission::PAGE_NEW);
426  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
427 
428  $result = (new DatabaseUserPermissionCheck())->addData($input);
429 
430  self::assertSame(‪Permission::PAGE_NEW, $result['userPermissionOnPage']);
431  }
432 
437  {
438  $input = [
439  'tableName' => 'tt_content',
440  'command' => 'new',
441  'vanillaUid' => 123,
442  'parentPageRow' => [
443  'uid' => 123,
444  'pid' => 321,
445  ],
446  ];
447  $this->beUserProphecy->isAdmin()->willReturn(false);
448  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
449  $this->beUserProphecy->calcPerms($input['parentPageRow'])->willReturn(‪Permission::CONTENT_EDIT);
450  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
451 
452  $result = (new DatabaseUserPermissionCheck())->addData($input);
453 
454  self::assertSame(‪Permission::CONTENT_EDIT, $result['userPermissionOnPage']);
455  }
456 
461  {
462  $input = [
463  'tableName' => 'pages',
464  'command' => 'new',
465  'vanillaUid' => 123,
466  'parentPageRow' => null,
467  ];
468  $this->beUserProphecy->isAdmin()->willReturn(false);
469  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
470  $this->beUserProphecy->recordEditAccessInternals($input['tableName'], Argument::cetera())->willReturn(true);
471  ‪$GLOBALS['TCA'][$input['tableName']]['ctrl']['security']['ignoreRootLevelRestriction'] = true;
472 
473  $result = (new DatabaseUserPermissionCheck())->addData($input);
474 
475  self::assertSame(‪Permission::ALL, $result['userPermissionOnPage']);
476  }
477 
482  {
483  $input = [
484  'tableName' => 'pages',
485  'command' => 'new',
486  'vanillaUid' => 123,
487  'parentPageRow' => null,
488  ];
489 
490  $this->beUserProphecy->isAdmin()->willReturn(false);
491  $this->beUserProphecy->check('tables_modify', $input['tableName'])->willReturn(true);
492 
493  $this->expectException(AccessDeniedRootNodeException::class);
494  $this->expectExceptionCode(1437745221);
495 
496  (new DatabaseUserPermissionCheck())->addData($input);
497  }
498 }
‪TYPO3\CMS\Backend\Form\FormDataProvider\DatabaseUserPermissionCheck
Definition: DatabaseUserPermissionCheck.php:36
‪TYPO3\CMS\Backend\Form\Exception\AccessDeniedContentEditException
Definition: AccessDeniedContentEditException.php:21
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\setUp
‪setUp()
Definition: DatabaseUserPermissionCheckTest.php:44
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionIfUserHasNoTablesModifyPermissionForGivenTable
‪addDataThrowsExceptionIfUserHasNoTablesModifyPermissionForGivenTable()
Definition: DatabaseUserPermissionCheckTest.php:67
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_NEW
‪const PAGE_NEW
Definition: Permission.php:50
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionIfCommandIsEditTableIsPagesAndUserHasNoPagePermissions
‪addDataThrowsExceptionIfCommandIsEditTableIsPagesAndUserHasNoPagePermissions()
Definition: DatabaseUserPermissionCheckTest.php:132
‪TYPO3\CMS\Backend\Form\Exception\AccessDeniedRootNodeException
Definition: AccessDeniedRootNodeException.php:21
‪TYPO3\CMS\Core\Type\Bitmask\Permission\NOTHING
‪const NOTHING
Definition: Permission.php:30
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataSetsUserPermissionsOnPageForNewPageIfPageNewIsDeniedAndHookAllowsAccess
‪addDataSetsUserPermissionsOnPageForNewPageIfPageNewIsDeniedAndHookAllowsAccess()
Definition: DatabaseUserPermissionCheckTest.php:378
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\$beUserProphecy
‪ObjectProphecy $beUserProphecy
Definition: DatabaseUserPermissionCheckTest.php:42
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataSetsUserPermissionsOnPageForAdminUser
‪addDataSetsUserPermissionsOnPageForAdminUser()
Definition: DatabaseUserPermissionCheckTest.php:55
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionForNewContentRecordWithoutPermissions
‪addDataThrowsExceptionForNewContentRecordWithoutPermissions()
Definition: DatabaseUserPermissionCheckTest.php:293
‪TYPO3\CMS\Core\Type\Bitmask\Permission
Definition: Permission.php:26
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionIfRootNodeShouldBeEditedWithoutPermissions
‪addDataThrowsExceptionIfRootNodeShouldBeEditedWithoutPermissions()
Definition: DatabaseUserPermissionCheckTest.php:243
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionForNewPageWithoutPermissions
‪addDataThrowsExceptionForNewPageWithoutPermissions()
Definition: DatabaseUserPermissionCheckTest.php:317
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest
Definition: DatabaseUserPermissionCheckTest.php:39
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataAddsUserPermissionsOnPageIfTableIsPagesAndUserHasPagePermissions
‪addDataAddsUserPermissionsOnPageIfTableIsPagesAndUserHasPagePermissions()
Definition: DatabaseUserPermissionCheckTest.php:188
‪TYPO3\CMS\Backend\Form\Exception\AccessDeniedEditInternalsException
Definition: AccessDeniedEditInternalsException.php:21
‪TYPO3\CMS\Core\Type\Bitmask\Permission\ALL
‪const ALL
Definition: Permission.php:60
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionIfCommandIsEditTableIsPagesAndUserHasNoDoktypePermissions
‪addDataThrowsExceptionIfCommandIsEditTableIsPagesAndUserHasNoDoktypePermissions()
Definition: DatabaseUserPermissionCheckTest.php:156
‪TYPO3\CMS\Backend\Form\Exception\AccessDeniedTableModifyException
Definition: AccessDeniedTableModifyException.php:21
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataSetsPermissionsToAllIfRootLevelRestrictionForTableIsIgnoredForContentEditRecord
‪addDataSetsPermissionsToAllIfRootLevelRestrictionForTableIsIgnoredForContentEditRecord()
Definition: DatabaseUserPermissionCheckTest.php:219
‪TYPO3\CMS\Backend\Form\Exception\AccessDeniedHookException
Definition: AccessDeniedHookException.php:21
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionIfRecordEditAccessInternalsReturnsFalse
‪addDataThrowsExceptionIfRecordEditAccessInternalsReturnsFalse()
Definition: DatabaseUserPermissionCheckTest.php:267
‪TYPO3\CMS\Core\Authentication\BackendUserAuthentication
Definition: BackendUserAuthentication.php:62
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionForNewRecordsOnRootLevelWithoutPermissions
‪addDataThrowsExceptionForNewRecordsOnRootLevelWithoutPermissions()
Definition: DatabaseUserPermissionCheckTest.php:480
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataSetsUserPermissionsOnPageForNewContentRecord
‪addDataSetsUserPermissionsOnPageForNewContentRecord()
Definition: DatabaseUserPermissionCheckTest.php:435
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataAddsUserPermissionsOnPageForContentIfUserHasCorrespondingPermissions
‪addDataAddsUserPermissionsOnPageForContentIfUserHasCorrespondingPermissions()
Definition: DatabaseUserPermissionCheckTest.php:108
‪TYPO3\CMS\Core\Type\Bitmask\Permission\CONTENT_EDIT
‪const CONTENT_EDIT
Definition: Permission.php:55
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionIfHookDeniesAccess
‪addDataThrowsExceptionIfHookDeniesAccess()
Definition: DatabaseUserPermissionCheckTest.php:344
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Type\Bitmask\Permission\PAGE_EDIT
‪const PAGE_EDIT
Definition: Permission.php:40
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataSetsUserPermissionsOnPageForNewPage
‪addDataSetsUserPermissionsOnPageForNewPage()
Definition: DatabaseUserPermissionCheckTest.php:411
‪TYPO3\CMS\Backend\Form\Exception\AccessDeniedPageNewException
Definition: AccessDeniedPageNewException.php:21
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataSetsPermissionsToAllIfRootLevelRestrictionForTableIsIgnoredForNewContentRecord
‪addDataSetsPermissionsToAllIfRootLevelRestrictionForTableIsIgnoredForNewContentRecord()
Definition: DatabaseUserPermissionCheckTest.php:459
‪TYPO3\CMS\Backend\Form\Exception\AccessDeniedPageEditException
Definition: AccessDeniedPageEditException.php:21
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider\DatabaseUserPermissionCheckTest\addDataThrowsExceptionIfUserHasNoContentEditPermissionsOnPage
‪addDataThrowsExceptionIfUserHasNoContentEditPermissionsOnPage()
Definition: DatabaseUserPermissionCheckTest.php:84
‪TYPO3\CMS\Backend\Tests\Unit\Form\FormDataProvider
Definition: DatabaseDefaultLanguagePageRowTest.php:18