我目前有几个用户roles
:
我还有一个名为Company
的模型。所有其他模型(包括User
模型)都具有company_id
属性。我想创建一个全局范围,将具有company_id
角色的用户的所有范围都限制在Admin
之外。不论模型适用于哪家公司,管理员都应该能够看到所有内容。
在访问应用程序中的任何页面时出现以下错误:
达到最大的函数嵌套级别'256',正在中止!
这是我的范围代码:
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class CompanyScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
if (auth()->check() && auth()->user()->role != 'Admin') {
$builder->where('company_id', auth()->user()->company_id);
}
}
}
以下是我如何应用范围的示例:
<?php
namespace App;
use App\Scopes\CompanyScope;
use App\Traits\ColumnFillable;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable, ColumnFillable;
protected $hidden = ['password', 'remember_token'];
public static function boot()
{
parent::boot();
static::addGlobalScope(new CompanyScope);
}
public function company()
{
return $this->belongsTo('App\Company');
}
}
这是我正在使用的示波器的另一种型号:
<?php
namespace App;
use App\Scopes\CompanyScope;
use App\Traits\ColumnFillable;
use Illuminate\Database\Eloquent\Model;
class Lead extends Model
{
use ColumnFillable;
protected $casts = [
'data' => 'array',
];
public static function boot()
{
parent::boot();
static::addGlobalScope(new CompanyScope);
}
public function company()
{
return $this->belongsTo('App\Company');
}
}
我猜想在Laravel调用auth()
函数时它正在创建一个无限循环吗?在不使用本地范围的情况下如何防止这种情况发生?
答案 0 :(得分:0)
我设法通过将条件语句移到boot
方法而不是作用域类中来解决此问题:
if (auth()->check() && auth()->user()->role != 'Admin') {
static::addGlobalScope(new CompanyScope);
}