管理者ログインをLaravel 5に組み込む簡単な方法


Authorization can be tricky. There are thousands of posts about how to perform authentication, but actually verifying who someone is and managing user permissions can be a whole can of worms. Fortunately, Laravel has systems in place that make a tiered login system very easy to implement.



Laravel 5 アプリに認証を追加するために必要なのは、1 つのコマンドだけです。




php artisan make:auth


カスタムミドルウェアを使用してLaravel管理ページを作成するための簡単なソリューション
現在、最新リリースの Laravel 5.5 を使用しています. Laravel 5.5 固有の唯一の処理は、フロントエンドの Blade ディレクティブの @guest ヘルパーです.アプリケーションの HTML セクションでは、これらのヘルパーにより、ユーザーがログインしているかどうかを簡単に確認できます.

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

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


If you’re not using Laravel 5.5 there are other workarounds but you might as well upgrade to the latest version for the new features!



✌ これを実現する方法は、ユーザー テーブルにタイプ列を追加し、カスタム ミドルウェアを介してユーザーがそのタイプを持っているかどうかを確認することです.派手に聞こえますが、とても簡単です!

1) 必要なタイプを User モデルに追加し、ユーザーが管理者かどうかを確認するメソッドを追加します。




/* app/User.php */
const ADMIN_TYPE = 'admin';
const DEFAULT_TYPE = 'default';
public function isAdmin()    {        
    return $this->type === self::ADMIN_TYPE;    
}


2) ユーザー テーブルを作成した移行に type 列を追加します。




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

#### 3) Add a type value to the create method in register controller

<pre><code class="language-php">
/* 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



namespace App\Http\Middleware;
use Closure;
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()->isAdmin()) {
            return $next($request);
        }
        return redirect('home');
    }
}


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


8) このコントローラーは、管理者に表示させたいビューのダッシュボードを返します。




<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AdminController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }
    public function admin()
    {
        return view('admin');
    }
}


🎉 それだけです!
/admin にアクセスし、ログインしていない場合、または管理者としてログインしている場合は、ページにアクセスできません.管理者ユーザーを作成するには、tinker artisan コマンドを使用できます.

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