Laravel по-русски

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

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

#1 26.08.2016 16:42:49

И вновь авторизация...

Добрый день. Хочу вынести на суд свой велокостыль, собранный на 4 день изучения Laravel, и попросить разъяснить некоторые моменты…

Авторизация для панели управления и для пользовательской части должны быть разделены, таблицы тоже разные, ибо у пользователей свои поля и зависимости, а администраторов другие. Я кое-как сделал и понимаю, что это жуть и нужно дорабатывать, но некоторые вещи мне не понятны, даже с документацией.

Я не использовал модель стандартную, ибо предпочитаю видеть свои запросы и строить их (в идеале) самостоятельно.

Создал свой контроллер с методом login:

PHP
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 (практически, как по умолчанию):

PHP
public function handle($requestClosure $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, похожего на стандартного:

PHP
public function handle($requestClosure $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, которого я использую для загрузки пользователя (авторизованного) из базы и для обновления времени последнего визита:

PHP
public function handle($requestClosure $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()? Вопросов много, на самом деле, и в основном они про авторизацию, остальное более-менее понятно.

Не в сети

#2 27.08.2016 13:00:56

Alex_01

Re: И вновь авторизация...

Непонимаю, зачем использовать фрейм, если не использовать все его возможности которые облегчают разработку...
Разделить пользователей и админов, можно было более "красиво", и это делается за пару минут. Кастом гуард

#3 27.08.2016 22:18:40

Re: И вновь авторизация...

Alex_01 пишет:

Непонимаю, зачем использовать фрейм, если не использовать все его возможности которые облегчают разработку...
Разделить пользователей и админов, можно было более "красиво", и это делается за пару минут. Кастом гуард

Галочку вам за отписку :-) Видимо и читать не читали вовсе.
Я где-то написал, что сделал идеально? Нет, вы конечно самый мудрый и умный, родились с познаниями Laravel, но я сразу спросил помощи, а не похвалы своего кода.
P.S. Guard'ы так то и используются. Не видно? Жаль вас, что вы такой внимательный.

Не в сети

#4 28.08.2016 17:38:57

Re: И вновь авторизация...

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

Не в сети

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