‪TYPO3CMS  ‪main
PagePermissionAssembler.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 TYPO3\CMS\Backend\Utility\BackendUtility;
24 
34 {
40  protected ‪$defaultPermissions = [
41  'user' => 'show,edit,delete,new,editcontent',
42  'group' => 'show,edit,new,editcontent',
43  'everybody' => '',
44  ];
45 
46  public function ‪__construct(array ‪$defaultPermissions = null)
47  {
48  // Initializing default permissions for pages
49  if (isset(‪$defaultPermissions['user'])) {
50  $this->defaultPermissions['user'] = ‪$defaultPermissions['user'];
51  }
52  if (isset(‪$defaultPermissions['group'])) {
53  $this->defaultPermissions['group'] = ‪$defaultPermissions['group'];
54  }
55  if (isset(‪$defaultPermissions['everybody'])) {
56  $this->defaultPermissions['everybody'] = ‪$defaultPermissions['everybody'];
57  }
58  }
59 
69  public function ‪applyDefaults(array $fieldArray, int $pid, int $backendUserId, int $backendUserGroupId): array
70  {
71  $fieldArray['perms_userid'] = $backendUserId;
72  $fieldArray['perms_groupid'] = $backendUserGroupId;
73  $fieldArray['perms_user'] = $this->‪assemblePermissions($this->defaultPermissions['user']);
74  $fieldArray['perms_group'] = $this->‪assemblePermissions($this->defaultPermissions['group']);
75  $fieldArray['perms_everybody'] = $this->‪assemblePermissions($this->defaultPermissions['everybody']);
76  $TSConfig = BackendUtility::getPagesTSconfig($pid)['TCEMAIN.'] ?? [];
77  if (isset($TSConfig['permissions.']) && is_array($TSConfig['permissions.'])) {
78  return $this->‪setTSconfigPermissions($fieldArray, $TSConfig['permissions.']);
79  }
80  return $fieldArray;
81  }
82 
91  protected function ‪setTSconfigPermissions(array $fieldArray, array $tsconfig): array
92  {
93  $parentPermissions = [];
94  if (in_array('copyFromParent', $tsconfig, true)) {
95  $parentPermissions = BackendUtility::getRecordWSOL('pages', $fieldArray['pid'], 'uid,perms_userid,perms_groupid,perms_user,perms_group,perms_everybody') ?? [];
96  }
97  if (
98  (string)($tsconfig['userid'] ?? '') !== ''
99  && ($tsconfig['userid'] !== 'copyFromParent' || isset($parentPermissions['perms_userid']))
100  ) {
101  $fieldArray['perms_userid'] = $tsconfig['userid'] === 'copyFromParent' ? (int)$parentPermissions['perms_userid'] : (int)$tsconfig['userid'];
102  }
103  if (
104  (string)($tsconfig['groupid'] ?? '') !== ''
105  && ($tsconfig['groupid'] !== 'copyFromParent' || isset($parentPermissions['perms_groupid']))
106  ) {
107  $fieldArray['perms_groupid'] = $tsconfig['groupid'] === 'copyFromParent' ? (int)$parentPermissions['perms_groupid'] : (int)$tsconfig['groupid'];
108  }
109  if (
110  (string)($tsconfig['user'] ?? '') !== ''
111  && ($tsconfig['user'] !== 'copyFromParent' || isset($parentPermissions['perms_user']))
112  ) {
113  $fieldArray['perms_user'] = $tsconfig['user'] === 'copyFromParent' ? (int)$parentPermissions['perms_user'] : $this->‪assemblePermissions($tsconfig['user']);
114  }
115  if (
116  (string)($tsconfig['group'] ?? '') !== ''
117  && ($tsconfig['group'] !== 'copyFromParent' || isset($parentPermissions['perms_group']))
118  ) {
119  $fieldArray['perms_group'] = $tsconfig['group'] === 'copyFromParent' ? (int)$parentPermissions['perms_group'] : $this->‪assemblePermissions($tsconfig['group']);
120  }
121  if (
122  (string)($tsconfig['everybody'] ?? '') !== ''
123  && ($tsconfig['everybody'] !== 'copyFromParent' || isset($parentPermissions['perms_everybody']))
124  ) {
125  $fieldArray['perms_everybody'] = $tsconfig['everybody'] === 'copyFromParent' ? (int)$parentPermissions['perms_everybody'] : $this->‪assemblePermissions($tsconfig['everybody']);
126  }
127  return $fieldArray;
128  }
129 
136  protected function ‪assemblePermissions($listOfPermissions): int
137  {
138  // Already set as integer, so this one is used.
139  if (‪MathUtility::canBeInterpretedAsInteger($listOfPermissions)) {
140  return (int)$listOfPermissions;
141  }
142  $keyArr = ‪GeneralUtility::trimExplode(',', $listOfPermissions, true);
143  $value = 0;
144  $permissionMap = ‪Permission::getMap();
145  foreach ($keyArr as $key) {
146  if ($key && isset($permissionMap[$key])) {
147  $value |= $permissionMap[$key];
148  }
149  }
150  return $value;
151  }
152 }
‪TYPO3\CMS\Core\DataHandling
Definition: DataHandler.php:16
‪TYPO3\CMS\Core\DataHandling\PagePermissionAssembler\$defaultPermissions
‪array $defaultPermissions
Definition: PagePermissionAssembler.php:39
‪TYPO3\CMS\Core\Type\Bitmask\Permission
Definition: Permission.php:26
‪TYPO3\CMS\Core\Utility\MathUtility\canBeInterpretedAsInteger
‪static bool canBeInterpretedAsInteger(mixed $var)
Definition: MathUtility.php:69
‪TYPO3\CMS\Core\DataHandling\PagePermissionAssembler\setTSconfigPermissions
‪array setTSconfigPermissions(array $fieldArray, array $tsconfig)
Definition: PagePermissionAssembler.php:90
‪TYPO3\CMS\Core\DataHandling\PagePermissionAssembler\assemblePermissions
‪int assemblePermissions($listOfPermissions)
Definition: PagePermissionAssembler.php:135
‪TYPO3\CMS\Core\DataHandling\PagePermissionAssembler
Definition: PagePermissionAssembler.php:34
‪TYPO3\CMS\Core\Utility\MathUtility
Definition: MathUtility.php:24
‪TYPO3\CMS\Core\DataHandling\PagePermissionAssembler\applyDefaults
‪array applyDefaults(array $fieldArray, int $pid, int $backendUserId, int $backendUserGroupId)
Definition: PagePermissionAssembler.php:68
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Core\Type\Bitmask\Permission\getMap
‪static getMap()
Definition: Permission.php:68
‪TYPO3\CMS\Core\Utility\GeneralUtility\trimExplode
‪static list< string > trimExplode(string $delim, string $string, bool $removeEmptyValues=false, int $limit=0)
Definition: GeneralUtility.php:822
‪TYPO3\CMS\Core\DataHandling\PagePermissionAssembler\__construct
‪__construct(array $defaultPermissions=null)
Definition: PagePermissionAssembler.php:45