Получить идентификатор пользователя в Laravel Gate - PullRequest
0 голосов
/ 02 мая 2020

Я провел много исследований, но не могу понять, как получить идентификатор пользователя (не идентификатор родителя). У меня есть родитель и пользователь, родитель - это тот, кто управляет пользователем.

Родитель - это онлайн-пользователь.

Мне нужно проверить, есть ли у отредактированного пользователя баланс.

@ can ('can-device', dd ($ user-> id)) // вернуть идентификатор пользователя

// Gate

Gate::define('can-device', function (User $user) {
    dd(user->id) //return parent id
    return $user->hasBalance();
});


    // User model
    @property int $id
 * @property integer $parent_id
 * @property string $name
 * @property string $email
 * @property string $password
 * @property string $phone
 * @property string $role
 * @property string $status
 * @property integer $balance
 * @property float $discount


public function hasBalance(): bool
{
    return $this->balance !== 0;
} 

 public function parent()
{
    return $this->belongsTo(static::class, 'parent_id', 'id');
}

public function children()
{
    return $this->hasMany(static::class, 'parent_id', 'id');
}


@can('can-device', $user)
<a href="{{ route('admin.devices.create', ['userId' => $user]) }}"

Как получить пользователя id?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 03 мая 2020

Вы можете использовать функцию коллекции Laravel каждый, где все элементы коллекции должны быть верны данному условию, для syntacti c сахара, я использую вызов функции более высокого порядка. При получении детей в качестве красноречивой коллекции с ->children.

Gate::define('can-device', function (User $user) {
    return $user->hasBalance() && $user->children->every->hasBalance();
});

РЕДАКТИРОВАТЬ

Вы можете использовать фильтр, чтобы получить только пользователей с балансом.

$user->children->filter('balance')->every->hasBalance()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...