Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 13.12.2017 11:30:04

Оптимизация присвоение роли поьзователю

Доброго времени суток!
Возможно, вы сможете мне подсказать как сделать мой код более оптимальным.

public function user()
    {
        $userId = (int)request('user_id');

        if (!(Auth::user()->hasRole(Role::ROLE_SUPERADMIN) || Auth::user()->hasRole(Role::ROLE_ADMIN))) {
            return Auth::user();
        } elseif ($userId && $user = User::find($userId)) {
            return $user;
        } else {
            return Auth::user();
        }
    }

Суть метода в том, что если наша роль не админ или суперадмин мы можем редактировать только свои данные. А, если есть get параметр user_id и этот id есть в БД (то есть пользователь существует), то мы можем править данные пользователя с переданным id.
Сам метод находится в сервисе.
Спасибо за уделенное время!

Не в сети

#2 13.12.2017 12:36:10

Re: Оптимизация присвоение роли поьзователю

Такие вещи нужно делать в политиках.

Плюс, для проверки ролей очень полезно иметь глобальные функции-помощники вроде isAdmin(), потому что роли проверяются очень часто и во всех частях приложения.

Если все-таки хочется сделать без политик, то я бы сделал примерно так:

public function user()
{
    $user = User::find(request('user_id'));

    return isSuperAdminOrAdmin() || is_null($user) ? auth()->user() : $user;
}

find() вернет null если пользователя нет, либо его ID не передали. Строку с ID он также успешно использует, поэтому нет необходимости конвертировать в число.

Не в сети

#3 13.12.2017 13:20:09

Re: Оптимизация присвоение роли поьзователю

Спасибо!

Не в сети

Подвал раздела