Мне нужно применять определенную глобальную область, только если роль аутентифицированного пользователя чем-то равна.Таким образом, этот пользователь с определенной ролью сможет выполнять запросы только для данного подмножества записей.
Я могу легко иметь дело с моделью пользователя (в настоящее время вошел в систему пользователя), но не в методе применения области действия.
https://github.com/laravel/framework/issues/22316#issuecomment-349548374
Конструктор области выполнения выполняется очень рано, до того, как промежуточное ПО аутентификации запустит .Разрешить пользователя в методе применения, а не в конструкторе.
ОК, поэтому я нахожусь внутри метода apply
:
<?php
namespace App\Scopes;
use Illuminate\Database\Eloquent\Scope;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Builder;
class UserScopeForSalesContactAdmin implements Scope
{
/**
* Apply the scope to a given Eloquent query builder.
*
* @param \Illuminate\Database\Eloquent\Builder $builder
* @param \Illuminate\Database\Eloquent\Model $model
* @return void
*/
public function apply(Builder $builder, Model $model)
{
dd('within apply', auth()->user());
dd(auth()->user()); // won't work
$builder->where('foo', '=', 'something from currently logged in user');
}
}
Очевидно, второе dd
дает:
Достигнут максимальный уровень вложенности функций '512', прерывание!
Как решить эту проблему?Я полагаю, что должен вызывать контейнер IOC через app()->make()
, но потом?
Спасибо за любые подсказки.
edit: Я думаю, что вижу причину бесконечного цикла (https://github.com/laravel/framework/issues/26113), ноТем не менее мне нужно найти лучший способ получить пользователя ...