From 90ec40691a6e523475d336a8ffb8280c05347b98 Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Tue, 14 Jun 2022 15:55:44 +0100 Subject: [PATCH] Added clone of entity permissions on chapter/book promotion --- app/Entities/Tools/Cloner.php | 12 ++++++++++++ app/Entities/Tools/HierarchyTransformer.php | 11 ++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/app/Entities/Tools/Cloner.php b/app/Entities/Tools/Cloner.php index 3553a9db3..91e10b9be 100644 --- a/app/Entities/Tools/Cloner.php +++ b/app/Entities/Tools/Cloner.php @@ -121,6 +121,18 @@ class Cloner return $inputData; } + /** + * Copy the permission settings from the source entity to the target entity. + */ + public function copyEntityPermissions(Entity $sourceEntity, Entity $targetEntity): void + { + $targetEntity->restricted = $sourceEntity->restricted; + $permissions = $sourceEntity->permissions()->get(['role_id', 'action'])->toArray(); + $targetEntity->permissions()->delete(); + $targetEntity->permissions()->createMany($permissions); + $targetEntity->rebuildPermissions(); + } + /** * Convert an image instance to an UploadedFile instance to mimic * a file being uploaded. diff --git a/app/Entities/Tools/HierarchyTransformer.php b/app/Entities/Tools/HierarchyTransformer.php index 17e153e05..c95d5fa53 100644 --- a/app/Entities/Tools/HierarchyTransformer.php +++ b/app/Entities/Tools/HierarchyTransformer.php @@ -16,19 +16,13 @@ class HierarchyTransformer protected Cloner $cloner; protected TrashCan $trashCan; - // TODO - Test setting book cover image from API - // Ensure we can update without resetting image accidentally - // Ensure api docs correct. - // TODO - As above but for shelves. - public function transformChapterToBook(Chapter $chapter): Book { // TODO - Check permissions before call // Permissions: edit-chapter, delete-chapter, create-book $inputData = $this->cloner->entityToInputData($chapter); $book = $this->bookRepo->create($inputData); - - // TODO - Copy permissions + $this->cloner->copyEntityPermissions($chapter, $book); /** @var Page $page */ foreach ($chapter->pages as $page) { @@ -48,8 +42,7 @@ class HierarchyTransformer // Permissions: edit-book, delete-book, create-shelf $inputData = $this->cloner->entityToInputData($book); $shelf = $this->shelfRepo->create($inputData, []); - - // TODO - Copy permissions? + $this->cloner->copyEntityPermissions($book, $shelf); $shelfBookSyncData = [];