Получить все строки, которые пользователь имеет право видеть - PullRequest
0 голосов
/ 19 января 2020

У меня есть модели Book и Page.
Пользователям может быть разрешено просматривать отдельные страницы из книги или всей книги. Например, у меня есть следующая таблица pages:

id | page_number | book_id
1        1          4
2        2          4
3        3          4

Пользователь A имеет разрешения на просмотр только страниц 1 и 2, как я могу получить из базы данных только те страницы, на которые у него есть разрешения на просмотр? (т.е. 1,2)

Кроме того, пользователь B имеет разрешение на просмотр всей книги (разрешение, назначенное записи книги, а не на все страницы в книге), поэтому он должен получить страницы 1 -3 (и, возможно, будущие страницы, которые могут быть добавлены в книгу).

Возможно ли реализовать это в Laravel? Может быть с bouncer или Laravel-permissions?

1 Ответ

0 голосов
/ 20 января 2020

Вероятно, проще всего сделать это проще: я бы не стал искать пакет для реализации, я думаю, возможно, просто пару таблиц взаимосвязей на Пользователь , где страницы или книги - это модели, которые использует пользователь. разрешено видеть:

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 выше.

Это действительно просто псевдокод, как я не знаю много об остальной части вашего кода, но, надеюсь, идея этого даст вам простое решение того, что вы просили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...