Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток!
Возможно, вы сможете мне подсказать как сделать мой код более оптимальным.
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.
Сам метод находится в сервисе.
Спасибо за уделенное время!
Не в сети
Такие вещи нужно делать в политиках.
Плюс, для проверки ролей очень полезно иметь глобальные функции-помощники вроде isAdmin(), потому что роли проверяются очень часто и во всех частях приложения.
Если все-таки хочется сделать без политик, то я бы сделал примерно так:
public function user()
{
$user = User::find(request('user_id'));
return isSuperAdminOrAdmin() || is_null($user) ? auth()->user() : $user;
}
find() вернет null если пользователя нет, либо его ID не передали. Строку с ID он также успешно использует, поэтому нет необходимости конвертировать в число.
Не в сети
Спасибо!
Не в сети
Страницы 1