今更ですが、Laravel5.1で管理者権限機能を実装したので、簡単に実装できる方法を解説します。
手順
1.usersテーブルにis_adminカラムを追加
2.Middlewareにadmin認証を追加
3.routeに権限を追加する
4.挙動を確認
開発環境
Laravel5.1
PHP5.5.9
macOS
usersテーブルにis_adminカラムを追加
usersテーブルにis_adminカラムを追加します。
php artisan make:migration add_role_to_users
/database/migrations にある新しく作成されたファイルにコードを追加します。
public function up()
{
Schema::table('users', function (Blueprint $table)
{
$table->int('is_admin');
});
}
public function down()
{
Schema::table('users', function (Blueprint $table)
{
$table->dropColumn('is_admin');
});
}
マイグレーションを実行します
php artisan migrate
これで、usersテーブルにis_adminカラムを追加することができました。
is_adminカラムを追加できたら、/app/User.php に下記のコードを追加します。
protected $casts = [
'is_admin' => 'boolean',
];
Seeder機能を使って管理者ユーザーを追加していきます。
php artisan make:seeder UsersTableSeeder
続いて、/database/seeds/UsersTableSeeder.php にコードを追加します。
public function run()
{
\App\User::create([
'name' => 'admin',
'email' => 'admin@example.com',
'password' => Hash::make('admin'),
'is_admin' => 1
]);
}
次のコマンドでusersテーブルに管理者ユーザを追加します。
php artisan db:seed --class=UsersTableSeeder
Middlewareにadmin認証を追加
ユーザーのroleがadminか判別したいので、middlewareを作成していきます。
php artisan make:middleware AdminAuth
次に、/app/Http/Middleware/AdminAuth.php にコードを追加します。
public function handle($request, Closure $next)
{
if(auth()->user()->is_admin === true) {
return $next($request);
}
return redirect('/');
}
middlewareをRouteから呼び出したいので、app/Http/kernel.php にコードを追加します。
use App\Http\Middleware\AdminAuth;
/* 省略 */
protected $routeMiddleware = [
/* 省略 */
'admin' => \App\Http\Middleware\AdminAuth::class,
];
routeに権限を追加する
routeファイルにmiddlewareを追加していきます。
Route::group(['middleware' => 'admin'], function () {
Route::get('/admin', function(){
return 'OK';
});
});
挙動を確認
管理者ユーザーでログインしてhttp://******/adminにアクセスします。
これで、アクセスしたページに「OK」と表示されたら成功です!!!
まとめ
Laravel5.2からはMultiAuth機能が実装されたので、できればLaravel5.2以上を使おう!