【发布时间】:2020-03-28 11:44:16
【问题描述】:
我正在尝试在我的一个模型中使用本地范围,但为此我需要检查用户权限,因此我尝试通过 Auth::user() 获取经过身份验证的用户。
但它给了我一个空值,因为我为这个模型声明了一个观察者,如果我评论观察者的声明,Auth::user() 方法给我一个经过身份验证的用户。
有一个正确的方法或地方来声明观察者,并且在模型中我可以获得经过身份验证的用户,因为我需要使用观察者并在引导方法中获取经过身份验证的用户?
Laravel 框架 6.5.2
AppServiceProvider 不要在模型中进行身份验证
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Conciliador::observe(ConciliadorObserver::class);
Proposta::observe(PropostaObserver::class);
}
AppServiceProvider 在模型中工作验证
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
//Conciliador::observe(ConciliadorObserver::class);
//Proposta::observe(PropostaObserver::class);
}
AppServiceProvider中声明Observer时模型没有用户登录
/**
* The "booting" method of the model.
*
* @return void
*/
protected static function boot()
{
parent::boot();
$user = Auth::user();
dd($user); // null if Observer is declared in AppServiceProvider
if($user && $user->tipo == 'admin-gerenciador'){
$conciliadores = $user->conciliadores->pluck('id')->toArray();
static::addGlobalScope('Conciliadores', function (Builder $builder) {
$builder->whereIn('id',$conciliadores);
});
}
}
【问题讨论】:
-
你使用的是哪个版本的 Laravel?
-
Laravel 框架 6.5.2 @ChinLeung