【问题标题】:Get all rows user is authorised to see获取用户有权查看的所有行
【发布时间】:2020-05-05 22:21:57
【问题描述】:

我有 BookPage 模型。
可以允许用户查看书中的单个页面或整本书。 比如我有如下pages表:

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

用户A 只能查看第 1 页和第 2 页,我如何才能从数据库中仅获取他有权查看的页面(即 1,2)

此外,用户B 有权查看整本书(分配给书籍记录的权限,而不是书籍中的所有页面),因此他应该获得第 1-3 页(可能还有可能是未来的页面)添加到书中)。

可以在 Laravel 中实现吗?也许是bouncerLaravel-permissions

【问题讨论】:

    标签: laravel laravel-authorization


    【解决方案1】:

    可能最容易保持简单:我不会指望一个包来实现,我认为可能只是 User 上的几个关系表,其中页面或书籍是用户的模型有权查看:

    book_user,其中有一个user_id 和一个book_id

    page_userpage 模型本身上有一个 page_iduser_id 以及一个 book_id,以便您可以拉出用户被授权的特定书籍的页面去看看。

    User 上建立多对多关系,并在 pages 关系上建立 book_id 的支点,然后在拥有当前用户后提取适当的授权。例如:

    // $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())
    

    然后根据上面的 if 检查中的更多逻辑将这些发送到您的视图。

    这实际上只是伪代码,因为我对您的代码库的其余部分了解不多,但希望这背后的想法能给您一个简单的解决方案来解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-06
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 2012-08-27
      相关资源
      最近更新 更多