]> BookStack Code Mirror - bookstack/blobdiff - app/Entities/Tools/PermissionsUpdater.php
Guest create page: name field autofocus
[bookstack] / app / Entities / Tools / PermissionsUpdater.php
index a547cd0a8f40473429273aa62b9c0fb95ddd44fc..eb4eb6b48581ae037fd95f911b46beea836bee83 100644 (file)
@@ -5,6 +5,8 @@ namespace BookStack\Entities\Tools;
 use BookStack\Actions\ActivityType;
 use BookStack\Auth\Permissions\EntityPermission;
 use BookStack\Auth\User;
+use BookStack\Entities\Models\Book;
+use BookStack\Entities\Models\Bookshelf;
 use BookStack\Entities\Models\Entity;
 use BookStack\Facades\Activity;
 use Illuminate\Http\Request;
@@ -67,4 +69,27 @@ class PermissionsUpdater
 
         return $formatted;
     }
+
+    /**
+     * Copy down the permissions of the given shelf to all child books.
+     */
+    public function updateBookPermissionsFromShelf(Bookshelf $shelf, $checkUserPermissions = true): int
+    {
+        $shelfPermissions = $shelf->permissions()->get(['role_id', 'view', 'create', 'update', 'delete'])->toArray();
+        $shelfBooks = $shelf->books()->get(['id', 'owned_by']);
+        $updatedBookCount = 0;
+
+        /** @var Book $book */
+        foreach ($shelfBooks as $book) {
+            if ($checkUserPermissions && !userCan('restrictions-manage', $book)) {
+                continue;
+            }
+            $book->permissions()->delete();
+            $book->permissions()->createMany($shelfPermissions);
+            $book->rebuildPermissions();
+            $updatedBookCount++;
+        }
+
+        return $updatedBookCount;
+    }
 }