Аксессор Laravel 5.7, который по существу проверяет относительность для аутентифицированного пользователя на основе нескольких возможных совпадений - PullRequest
0 голосов
/ 19 октября 2018

В моей модели есть несколько областей действия для 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, как я могу проверить относительность на основе этихте же проверки в областях и возвращают логическое значение?

1 Ответ

0 голосов
/ 19 октября 2018

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

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...