Вероятно, проще всего сделать это проще: я бы не стал искать пакет для реализации, я думаю, возможно, просто пару таблиц взаимосвязей на Пользователь , где страницы или книги - это модели, которые использует пользователь. разрешено видеть:
book_user
, где у вас есть user_id
и book_id
А
page_user
, где у вас есть page_id
и user_id
плюс book_id
на самой модели page , чтобы вы могли перетащить страницы для конкретной c книги, которую пользователь имеет право видеть.
Сделайте ваши многочисленные ко многим отношениям в User вместе со сводкой для book_id
в отношении pages
, а затем получите соответствующую авторизацию после получения текущего пользователя. Например:
// $user set above - might be $user = \Auth::user() or from an id from a form
if(isset($user->books->find($someBookID))
$book = Book::find($someBookID);
// pages below might be related to a specific book: pages->where('book_id', $something)
elseif(count($user->pages->pluck('page_id'))
$pages = Page::whereIn('page_number', $user->pages->pluck('page_id')->toArray())
А затем отправьте их вашему представлению, основываясь на немного большем количестве логи c в проверках if выше.
Это действительно просто псевдокод, как я не знаю много об остальной части вашего кода, но, надеюсь, идея этого даст вам простое решение того, что вы просили.