Авторизация может быть сложной. Существуют тысячи сообщений о том, как выполнять аутентификацию, но на самом деле проверка того, кем является кто-то, и управление разрешениями пользователей может быть целой банкой червей. К счастью, в Laravel есть системы, которые упрощают реализацию многоуровневой системы входа.

Прежде чем мы начнем, я хотел бы поблагодарить Ника Базиля и его отличные блоги на эту тему. Чтобы добавить аутентификацию в приложение Laravel 5, вам нужна всего одна команда:

$ php artisan make:auth

Вот и все. Если вы новичок в Laravel, добро пожаловать. Для разработчиков Laravel эта функция существует уже давно. Теперь у нас есть система авторизации с формами входа и всем остальным. Все это работает, но для целей этой публикации нас интересует авторизация.

Исходный код этой статьи доступен на github.

Эти два коммита - вот где все и упало.

Простое решение для создания страницы администратора Laravel с использованием специального промежуточного программного обеспечения

Сейчас я использую Laravel 5.5, последнюю версию. Единственная особенность Laravel 5.5 - это помощник @guest в директивах внешнего интерфейса Blade. В разделе HTML приложения эти помощники позволяют нам легко проверить, вошел ли пользователь в систему или нет:

@auth
    // The user is authenticated...
@endauth

@guest
    // The user is not authenticated...
@endguest

Если вы не используете Laravel 5.5, есть другие обходные пути, но вы также можете обновить его до последней версии, чтобы получить новые функции!

🔒 Ладно, собственно, сейчас строим систему

Есть много способов построить систему авторизации. Существуют предварительно созданные пакеты, которые позволяют управлять ролями и разрешениями. Я уверен, что они великолепны, так как их поддерживает Спати, который делает все пакеты Laravel с бомбой. Однако для этого я не хотел приносить тяжелую упаковку и заставлять ее работать. Все, что я хотел для этого приложения Laravel, - это иметь небольшое тихое место, в которое могу войти только я, как администратор. Все остальные могут войти в систему и увидеть свою панель управления или профиль или что-то еще, но только я могу войти в систему и увидеть страницу администратора.

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

  1. Добавьте нужные типы в модель User и метод проверки, является ли пользователь администратором.
/* app/User.php */
const ADMIN_TYPE = 'admin';
const DEFAULT_TYPE = 'default';
public function isAdmin()    {        
    return $this->type === self::ADMIN_TYPE;    
}

2. Добавьте столбец типа в миграцию, в которой была создана ваша таблица пользователей.

/* database/migrations/2014_10_12_000000_create_users_table.php */
$table->string('type')->default('default');

3. Добавьте значение типа в метод create в контроллере регистров.

/* app/Http/Controllers/Auth/RegisterController.php */
protected function create(array $data)    {        
    return User::create([            
        'name' => $data['name'],
        'email' => $data['email'],            
        'password' => bcrypt($data['password']),            
        'type' => User::DEFAULT_TYPE,        
    ]);    
}

4. Создайте собственный файл промежуточного программного обеспечения, чтобы проверить, является ли пользователь администратором. Создайте этот файл с помощью php artisan make:middleware IsAdmin

5. Зарегистрируйте только что созданное промежуточное ПО.

/* app/Http/Kernel.php */
'is_admin' => \App\Http\Middleware\IsAdmin::class,

6. Добавьте несколько маршрутов, которые вызывают промежуточное ПО.

/* routes/web.php */
Route::view('/', 'welcome');
Auth::routes();
Route::get('/home', 'HomeController@index')    
    ->name('home');
Route::get('/admin', 'AdminController@admin')    
    ->middleware('is_admin')    
    ->name('admin');

7. Создайте контроллер администратора с php artisan make:controller AdminController. Этот контроллер возвращает панель управления для любого вида, который вы хотите, чтобы ваш администратор видел.

🎉 Вот и все!

Теперь, если вы зайдете на страницу / admin и не вошли в систему или не вошли в систему как администратор, вы не сможете получить доступ к странице. Чтобы создать пользователя-администратора, вы можете использовать команду tinker artisan:

$ php artisan tinker
>>> use App\User;
>>>User::where('email', '[email protected]')->update(['type' => 'admin']);

Затем, когда вы войдете в систему как этот пользователь, вы сможете увидеть страницу администратора! Полная кодовая база ниже. Вы также можете ознакомиться с этими связанными статьями о создании списка задач и шаблоне проектирования репозитория.

Спасибо за прочтение! Если вам понравилась эта статья, похлопайте по ней или поделитесь ею в социальных сетях.

🚀 Если вы кандидат на рынке труда или стартап, желающий нанять в Bay Area, не стесняйтесь создать профиль на Employbl 🤝