Средство доступа Laravel 5.7, которое, по сути, проверяет относительность пользователя auth на основе нескольких возможных совпадений.

У меня есть несколько областей моей модели для relativeTo или notRelativeTo:

public function scopeRelativeTo($query, User $user)
{
    $teamIDs = $user->teams->pluck('id');

    $query->where('assigned_user_id', $user->id)
        ->orWhere('reported_by', $user->id)
        ->orWhereIn('assigned_team_id', $teamIDs);
}


public function scopeNotRelativeTo($query, User $user)
{
    $teamIDs = $user->teams->pluck('id');

    $query->where('assigned_user_id', '!=', $user->id)
        ->orWhere('reported_by', '!=', $user->id)
        ->orWhereNotIn('assigned_team_id', $teamIDs);
}

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

public function getRelativityAttribute($value)
{
    $user = User::find(auth('api')->user()->id);
}

С аутентифицированным пользователем и зная, что у меня также есть доступ к фактическому классу: $this, как я могу проверить относительность на основе тех же проверок в областях и вернуть логическое значение?


person Matt Larson    schedule 18.10.2018    source источник


Ответы (1)


Попробуй это:

public function getRelativityAttribute($value)
{
    $user = auth('api')->user();
    if (!$user) {
        return false;
    }

    $userId = $user->getKey();
    return $this->assigned_user_id == $userId || $this->reported_by == $userId
           || $user->teams()->where('id', $this->assigned_team_id)->exists();
}
person Paras    schedule 18.10.2018
comment
Кажется, это возвращает true для всего, несмотря на то, что есть явные случаи, когда этого быть не должно. - person Matt Larson; 19.10.2018
comment
Я обновил свой ответ, последнее условие должно быть без ! - person Paras; 19.10.2018