LoginSignup
5
0

More than 5 years have passed since last update.

[Laravel5.1]簡単に管理者権限機能(同じテーブル編)

Last updated at Posted at 2019-04-09

今更ですが、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以上を使おう!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0