Laravel RBAC的不同行为

时间:2016-05-31 13:21:18

标签: laravel eloquent rbac

我在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)

1 个答案:

答案 0 :(得分:1)

在查询联接时添加select主表是很好的:

$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模型。