Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Добрый день. Хочу вынести на суд свой велокостыль, собранный на 4 день изучения Laravel, и попросить разъяснить некоторые моменты…
Авторизация для панели управления и для пользовательской части должны быть разделены, таблицы тоже разные, ибо у пользователей свои поля и зависимости, а администраторов другие. Я кое-как сделал и понимаю, что это жуть и нужно дорабатывать, но некоторые вещи мне не понятны, даже с документацией.
Я не использовал модель стандартную, ибо предпочитаю видеть свои запросы и строить их (в идеале) самостоятельно.
Создал свой контроллер с методом login:
function login(Request $request)
{
if (Auth::attempt([
'username' => $request->get('username'),
'password' => $request->get('password')
], false)) {
$userID = Auth::id();
// проверим на наличие бана
// (через метод с запросом в своей модели)
// если есть бан - сообщаем пользователю об этом и logout'им
// если нет бана - редиректим дальше
return Redirect::route('site::cabinet::main');
}
// возвращаем к форме авторизации
// говорим, что логин\пароль указаны неверно
}
Метод, собственно, авторизует нашего пользователя (именно пользователя, но у админов по аналогии в отдельном контроллере)
Для проверки статуса авторизации сделал общего для двух областей посредника CheckAuth (практически, как по умолчанию):
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
switch ($guard) {
case 'adm' :
$route = 'admin::auth::login';
break;
default :
$route = 'site::cabinet::login';
break;
}
return redirect()->route($route);
}
return $next($request);
}
Для проверки статуса гостя, чтобы выгонять с маршрутов для авторизации, так же сделал общего посредника CheckNotAuth, похожего на стандартного:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
switch ($guard) {
case 'adm' :
$route = 'admin::main';
break;
default :
$route = 'site::cabinet::main';
break;
}
return redirect()->route($route);
}
return $next($request);
}
И ещё один посредник LoadUser, которого я использую для загрузки пользователя (авторизованного) из базы и для обновления времени последнего визита:
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
switch ($guard) {
case 'adm' :
$sql = "update admins set updated_at = ? where id = ?";
break;
default :
$sql = "update users set updated_at = ? where id = ?";
break;
}
DB::update($sql, [new Carbon(), Auth::id()]);
}
return $next($request);
}
Далее я добавил в Kernel, всё по стандарту. В нужных маршрутах указал посредников для проверки пользователя\гостя, и для групп маршрутов для админской области и для пользовательской добавил по посреднику LoadUser (со своим guard)
Оно работает, повторюсь, и будь я пофигистом, который не планирует изучать fw дальше, я бы забил, но сегодня прошу вашей помощи.
К примеру меня очень интересует, если использовать стандартную модель пользовательскую, можно ли её перенести в свою директорию, можно ли избежать Active Record? На каком этапе она подгрузит пользователя в окружение и когда Laravel обновляет updated_at, задействовав метод touch()? Вопросов много, на самом деле, и в основном они про авторизацию, остальное более-менее понятно.
Не в сети
Непонимаю, зачем использовать фрейм, если не использовать все его возможности которые облегчают разработку...
Разделить пользователей и админов, можно было более "красиво", и это делается за пару минут. Кастом гуард
Непонимаю, зачем использовать фрейм, если не использовать все его возможности которые облегчают разработку...
Разделить пользователей и админов, можно было более "красиво", и это делается за пару минут. Кастом гуард
Галочку вам за отписку :-) Видимо и читать не читали вовсе.
Я где-то написал, что сделал идеально? Нет, вы конечно самый мудрый и умный, родились с познаниями Laravel, но я сразу спросил помощи, а не похвалы своего кода.
P.S. Guard'ы так то и используются. Не видно? Жаль вас, что вы такой внимательный.
Не в сети
Товарищи, сам проанализировал, что нужно изменить, чтобы избежать дичайшего велостроения.
Потому, считаю, что тема закрыта (модераторы, если реально - закройте тему)
Не в сети
Страницы 1