Laravel 5委托 - hasRole不工作

时间:2015-03-09 02:36:37

标签: authentication laravel laravel-5

我有一个已登录的用户,此处的代码有效:

@if( Auth::check() )
Logged in as: {{ Auth::user()->firstname }} {{ Auth::user()->lastname  }}
@endif

我正在使用zizaco /委托,而且一切正常。我已经创建了角色和权限,并为我的用户提供了具有管理权限的管理员角色。

为什么这不起作用:

$user = Auth::user();
print_r($user->hasRole('admin'));

如果我print_r $ user我可以看到Auth用户已加载,但hasRole无效。我现在只是在刀片模板中对此进行了测试,但是在Controller中尝试了相同的结果。我的错误是:

BadMethodCallException in Builder.php line 1992:
Call to undefined method Illuminate\Database\Query\Builder::hasRole()

我的用户模型:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
use Zizaco\Entrust\Traits\EntrustUserTrait;

class User extends Model {
  use EntrustUserTrait;

   protected $table = 'users';
   public $timestamps = true;

   use SoftDeletes;

   protected $dates = ['deleted_at'];

}

更新

当我以这种方式查看用户时,我意识到hasRole适用于我(返回App \ Models \ User Object):

$user = \App\Models\User::find( \Auth::user()->id );

但不是当我以这种方式找到用户时(返回App \ User Object):

$user = \Auth::user();

我宁愿认为它会以另一种方式工作,当我拉起App \ User时我可以访问hasRole但不一定在我搜索用户时。我认为hasRole可以直接从Auth :: user()工作,而不必用用户模型查找用户...... ???

2 个答案:

答案 0 :(得分:5)

发现问题..

在config / auth.php我有

'model' => 'App\User',

我的命名空间需要

'model' => 'App\Models\User',

答案 1 :(得分:0)

感谢您的更新,这对我来说也是一个问题。我使用了你的建议,然后放入了我的HomeController

public function index()
{
    $user = User::find( \Auth::user()->id );

    return view('home', compact('user'));
}

然后在我的主页视图中

@if ($user->hasRole('Admin'))
    <li><a href="/users/create">Create User</a></li>
@endif
<li><a href="/users">User List</a></li>
<li><a href="">Create Client</a></li>
<li><a href="">Create Payment</a></li>

一切都很完美......