Laravel 5 委托 - hasRole 不工作
Laravel 5 with entrust - hasRole not working
我有一个登录用户,这里的代码有效:
@if( Auth::check() )
Logged in as: {{ Auth::user()->firstname }} {{ Auth::user()->lastname }}
@endif
我正在使用 zizaco/entrust,一切正常。我已经创建了角色和权限,并为我的用户授予了具有管理权限的管理员角色。
为什么这行不通:
$user = Auth::user();
print_r($user->hasRole('admin'));
如果我 print_r $user 我可以看到 Auth 用户已加载,但 hasRole 不起作用。我当时只是在 blade 模板中对此进行了测试,但在 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 对我有用 (returns App\Models\User Object):
$user = \App\Models\User::find( \Auth::user()->id );
但不是当我以这种方式找到用户时 (returns App\User Object):
$user = \Auth::user();
我宁愿认为它会以另一种方式工作,当我拉起 App\User 我可以访问 hasRole 但在我搜索用户时不一定。我认为 hasRole 可以直接从 Auth::user() 开始工作,而不必使用用户模型查找用户...???
发现问题..
在 config/auth.php 我有
'model' => 'App\User',
我的命名空间需要
'model' => 'App\Models\User',
感谢您的更新,这对我来说也是一个问题。我采纳了你的建议,并放入了我的 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>
一切都很完美...
我有一个登录用户,这里的代码有效:
@if( Auth::check() )
Logged in as: {{ Auth::user()->firstname }} {{ Auth::user()->lastname }}
@endif
我正在使用 zizaco/entrust,一切正常。我已经创建了角色和权限,并为我的用户授予了具有管理权限的管理员角色。
为什么这行不通:
$user = Auth::user();
print_r($user->hasRole('admin'));
如果我 print_r $user 我可以看到 Auth 用户已加载,但 hasRole 不起作用。我当时只是在 blade 模板中对此进行了测试,但在 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 对我有用 (returns App\Models\User Object):
$user = \App\Models\User::find( \Auth::user()->id );
但不是当我以这种方式找到用户时 (returns App\User Object):
$user = \Auth::user();
我宁愿认为它会以另一种方式工作,当我拉起 App\User 我可以访问 hasRole 但在我搜索用户时不一定。我认为 hasRole 可以直接从 Auth::user() 开始工作,而不必使用用户模型查找用户...???
发现问题..
在 config/auth.php 我有
'model' => 'App\User',
我的命名空间需要
'model' => 'App\Models\User',
感谢您的更新,这对我来说也是一个问题。我采纳了你的建议,并放入了我的 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>
一切都很完美...