Symbols count in article:
453
Reading time:
2 mins.
安裝新的 Laravel
composer create-project --prefer-dist laravel/laravel login 5.2.29
設定 vhost
Database 連線和 migration
建立資料庫、設定 .env
直接 migrate php artisan migrate
建立登入系統
php artisan make:auth
取得登入的使用者資料
修改 HomeController
1 2 3 4 5 6 public function index() { $user = Auth::user(); return view('home', compact('user')); }
在 view 取得資料 {{ "{{$user->name" }}}}
Auth::check
:檢查登入資料、Auth::attempt
:檢查是否有權限。
建立 Middleware
建立一個新的 middleware:php artisan make:middleware RoleMiddleware
進入維護模式:php artisan down
關閉維護模式:php artisan up
在 kernal.php 新增 alias:'role' => \App\Http\Middleware\RoleMiddleware::class,
新增 routes Route::get('/admin/user/roles', ['middleware'=>'role', function(){return "Middleware role";}]);
修改 RoleMiddleware 導向至首頁 return redirect('/');
Middleware 應用 - roles, migration and relations
新增 Role Model:php artisan make:model Role -m
新增 role_id 到 User table:$table->integer('role_id');
新增 name 到 Role table:$table->string('name');
更新資料庫:php artisan migrate:refresh
在 User Model 新增 relation
1 2 3 4 5 public function role(){ return $this->belongsTo('App\Role'); }
Middleware 應用 1
新增一個新的 middleware:php aritsan make:middleware IsAdmin
在 kernal.php 新增 alias:'IsAdmin' => \App\Http\Middleware\IsAdmin::class,
在 User Model 新增 function
1 2 3 4 5 6 7 8 9 10 11 public function isAdmin(){ if($this->role->name == 'administrator'){ return true; } return false; }
在 routes 測試 function
1 2 3 4 5 if($user->isAdmin()){ echo "this user is a administrator"; }
Middleware 應用 2
將 function 從 routes 移動到 IsAdmin middle ware 的 handle function
1 2 3 4 5 6 7 $user = Auth::user(); if($user->isAdmin()){ return redirect()->intended('/admin'); }
新增 routes 連到 controller:Route::get('/admin', 'AdminController@index');
新增 controller:php artisan make:controller AdminController
新增 function 到 controller
1 2 3 4 5 6 7 8 9 10 public function __construct() { $this->middleware('IsAdmin'); } public function index(){ return "you are and administrator because you are seeing this page"; }
如果不是 administrator 就導向首頁
1 2 3 4 5 6 7 $user = Auth::user(); if(!$user->isAdmin()){ return redirect('/'); }