Пустая модель в глобальном масштабе Eloquent? - PullRequest
0 голосов
/ 16 мая 2018

Я пытаюсь определить, есть ли у пользователя возможность обновить модель в глобальной области, но я использую префиксы разрешений, которые я обычно получаю через отношение.

Применяется следующий код:

public function apply(Builder $builder, Model $model)
{
    $user = getUser();

    if ($user === null || $user->cannot('update', $model)) {
        $builder->where('active', '=', 1);
    }
}

Когда я dd($model) модель фактически не создается, поэтому, когда я делаю проверку прав доступа в моей политике:

public function update(User $user, Item $item)
{
    return $user->hasAnyPermission(['edit-things', $this->prefix($item) . "-edit-item"]);
}

Где префиксная функция выглядит так:

private function prefix(Item $item = null)
{
    if ($item !== null) {
        return $item->parentRelation->roles_permission_prefix;
    }
    $parentRelation= ParentRelation::findOrFail(request('parent_relation_id'));
    return $parentRelation->roles_permission_prefix;
}

Все это терпит неудачу из-за того, что они на самом деле не являются отношениями. Есть идеи?

Быстрое редактирование: я использую библиотеку разрешений Spatie, если это уместно.

1 Ответ

0 голосов
/ 16 мая 2018

Единственная функция, которая может нарушить отсутствующее отношение - это функция prefix().

Вы можете предотвратить вызов prefix(), проверив, равны ли оба значения $model и $model->parentRelation в вашем списке условий:

public function apply(Builder $builder, Model $model)
{
    $user = getUser();

    if (   $user === null 
        || $model === null 
        || (method_exists($model, 'parent_relation') && !$model->parentRelation)
        || $user->cannot('update', $model)
    ) {
        $builder->where('active', '=', 1);
    }
}
...