Jednoduchý e-shop Laravel 5.3 část 6 – základ administrační části
Takže teď začneme tvořit administraci pro náš jednoduchý e-shop. Využijeme vestavěnou adminstraci v Laravelu 5.3. Před započetím je potřeba si zazálohovat stávající e-shop. protože dojde k přepsání některých souborů a my si pak jejich obsah obnovíme ze zálohy.
1 |
php artisan make:auth |
Tento příkaz upraví HomeController, v adresáři Controllers vytvoří nový adresář Auth s controllery pro přihlašování. V resources/views je upraven soubor home.blade.php a opět je vytvořen adresář auth s obsahem a nakonec je upraven i soubour routes/web.php. Takže HomeController.php, home.blade.php a routes/web.php si obnovíme ze zálohy. A začneme s úpravami, nejpreve si upravíme tabulku pro přihlašování uživatelů a to konkrétně si přidáme sloupec admin.
1 |
php artisan make:migration add_admin_to_users |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class AddAdminToUsers extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function($table) { $table->boolean('admin')->after('remember_token')->default(false); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::table('users', function($table) { $table->dropColumn('admin'); }); } } |
1 |
php artisan migrate |
a protože náš e-shop je opravdu jednoduchý, prozatím budeme mít jednoho uživatele jako administrátora, využijeme další úžasnou věc a to php artisan tinker
1 |
php artisan tinker |
1 2 3 4 5 6 |
$user = App\User; $user->name = 'admin'; $user->email = 'mar.don@seznam.cz'; $user->password = bcrypt('heslo'); $user->admin = true; $user->save(); |
Takže v databázi již máme administrátora a teď si upravíme routy tedy web.php a to takto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php Route::get('/', 'HomeController@index'); Route::post('/addcart', 'CartController@postAdd'); Route::get('/cart','CartController@index'); Route::get('/checkout','CheckoutController@index'); Route::post('/checkout', 'CheckoutController@add'); Route::group(['middleware' => ['web']], function() { Route::get('login', ['as' => 'login', 'uses' => 'Auth\LoginController@showLoginForm']); Route::post('login', ['as' => 'login.post', 'uses' => 'Auth\LoginController@login']); Route::get('logout', ['as' => 'logout', 'uses' => 'Auth\LoginController@logout']); Route::get('password/reset', ['as' => 'password.reset', 'uses' => 'Auth\ForgotPasswordController@showLinkRequestForm']); Route::post('password/email', ['as' => 'password.email', 'uses' => 'Auth\ForgotPasswordController@sendResetLinkEmail']); Route::get('password/reset/{token}', ['as' => 'password.reset.token', 'uses' => 'Auth\ResetPasswordController@showResetForm']); Route::post('password/reset', ['as' => 'password.reset.post', 'uses' => 'Auth\ResetPasswordController@reset']); }); Route::group(['prefix' => 'admin', 'middleware' => 'admin'],function () { Route::get('/', 'AdminController@index'); }); |
Původní vygenerovaný Auth::routes() nepoužijeme protože obsahuje i routu pro registraci a to my nepotřebujeme. Z výše uvedeného kodu je vidět, že používáme budeme používat route middleware , takže si jej vytvoříme
1 |
php artisan make:middleware IsAdmin |
v app/Http/Middleware se vytvoří soubor IsAdmin.php, který si upravíme takto:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php namespace App\Http\Middleware; use Closure; use Auth; class IsAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (Auth::user() && Auth::user()->admin == 1) { return $next($request); } return redirect('/login'); } } |
ještě je potřeba routeMiddleware v souboru v Kernel.php
1 2 3 4 5 6 7 8 9 |
protected $routeMiddleware = [ 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'admin' => \App\Http\Middleware\IsAdmin::class, ]; |
a ještě drobná úprava v LoginControlleru
1 |
protected $redirectTo = '/admin'; |
no nakonec si ještě vytvoříme AdminController
1 |
php artisan make:controller AdminController |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; class AdminController extends Controller { public function index() { echo "admin"; } } |
no a nyní můžeme otestovat přihlášení do administrace.
A jako všechny předchozí úpravy i tuto najdete na githubu.