【问题标题】:Laravel RBAC different behavioursLaravel RBAC 不同的行为
【发布时间】:2016-09-29 12:58:34
【问题描述】:

我在 laravel 5.2 中使用这个 package,当使用从控制器发送不同的结果到视图时,我得到了不同的行为:

当我进行这样的查询时:

$users = User::all();

然后在我看来,我可以像这样检查用户角色:

@if($user->is('admin'))

这是预期的行为,但是当我发送这样的查询结果时:

$users = User::leftjoin('role_user', 'users.id', '=', 'role_user.user_id')
               ->orderBy(DB::raw('role_id IS NULL'))
               ->groupBy('users.id')
               ->orderBy('role_id')
               ->get();

我不能像我应该做的那样做检查,但我需要这样检查:

@if($user->role_id ==1)

【问题讨论】:

    标签: laravel eloquent rbac


    【解决方案1】:

    查询联接时最好添加选择主表:

    $users = User::leftjoin('role_user', 'users.id', '=', 'role_user.user_id')
               ->select('users.*')
               ->orderBy(DB::raw('role_id IS NULL'))
               ->groupBy('users.id')
               ->orderBy('role_id')
               ->get();
    

    那么在你看来:

    @foreach($users as $user)
        @if($user->is('admin'))
             (...)
        @endif
    @endforeach
    

    如果这没有帮助,那么您必须检查 item 的类型。可能其他一些捆绑软件会中断查询模型并返回 stdClass 而不是 User 模型。

    【讨论】:

    • 不知道会有什么不同,谢谢,解决了!
    猜你喜欢
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多