Skip to content

Commit ec0a656

Browse files
committed
fix: add missing root node permissions
1 parent 6eb6e76 commit ec0a656

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

src/Service/Permission/PermissionService.php

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public function getAssetPermissions(
5050
/** @var AssetPermissions $permissions */
5151
$permissions = $this->getPermissions(
5252
elementPath: $asset->getFullPath(),
53+
parentId: $asset->getParentId(),
5354
permissionsType: AssetWorkspace::WORKSPACE_TYPE,
5455
defaultPermissions: $permissions,
5556
user: $user
@@ -66,6 +67,7 @@ public function getDocumentPermissions(
6667
/** @var DocumentPermissions $permissions */
6768
$permissions = $this->getPermissions(
6869
elementPath: $document->getFullPath(),
70+
parentId: $document->getParentId(),
6971
permissionsType: DocumentWorkspace::WORKSPACE_TYPE,
7072
defaultPermissions: $permissions,
7173
user: $user
@@ -82,6 +84,7 @@ public function getDataObjectPermissions(
8284
/** @var DataObjectPermissions $permissions */
8385
$permissions = $this->getPermissions(
8486
elementPath: $object->getFullPath(),
87+
parentId: $object->getParentId(),
8588
permissionsType: DataObjectWorkspace::WORKSPACE_TYPE,
8689
defaultPermissions: $permissions,
8790
user: $user,
@@ -111,17 +114,18 @@ public function getPermissionValue(BasePermissions $permissions, string $permiss
111114

112115
private function getPermissions(
113116
string $elementPath,
117+
int $parentId,
114118
string $permissionsType,
115119
BasePermissions $defaultPermissions,
116120
?User $user
117-
): ?BasePermissions {
121+
): BasePermissions {
118122
$adminPermissions = $this->getAdminUserPermissions(
119123
$user,
120124
$defaultPermissions
121125
);
122126

123127
if ($adminPermissions) {
124-
return $adminPermissions;
128+
return $this->addRootNodePermissions($elementPath, $parentId, $adminPermissions);
125129
}
126130

127131
$userWorkspaces = $this->workspaceService->getRelevantWorkspaces(
@@ -136,8 +140,9 @@ private function getPermissions(
136140
$elementPath
137141
);
138142
}
143+
$permissions = $this->getPermissionsFromWorkspaces($userWorkspaces, $userRoleWorkspaces) ?? $defaultPermissions;
139144

140-
return $this->getPermissionsFromWorkspaces($userWorkspaces, $userRoleWorkspaces);
145+
return $this->addRootNodePermissions($elementPath, $parentId, $permissions);
141146
}
142147

143148
private function getAdminUserPermissions(
@@ -206,4 +211,21 @@ private function addRelevantRolePermissions(
206211

207212
return $workspacePermissions;
208213
}
214+
215+
private function addRootNodePermissions(
216+
string $fullPath,
217+
int $parentId,
218+
BasePermissions $permissions
219+
): BasePermissions
220+
{
221+
if ($fullPath === '/' && $parentId === 0) {
222+
$permissions->setDelete(false);
223+
$permissions->setRename(false);
224+
if (method_exists($permissions, 'setUnpublish')) {
225+
$permissions->setUnpublish(false);
226+
}
227+
}
228+
229+
return $permissions;
230+
}
209231
}

0 commit comments

Comments
 (0)