最新ソースはこちら(gitHub)
https://github.com/takishita2nd/hotel-mng
さて、お次の課題は、
- 一般ユーザーからでも予約登録ができる
 - レスポンシブ対応にする
 
です。
で、そのために必要になるのが、ユーザーの権限管理というものです。
具体的には、管理者用のアカウントを登録して、管理者アカウントからは今までのフル機能が使用できる。
その一方で、通常ユーザーの場合は、一部の機能だけが使用できる、という感じです。
Laravelの権限管理の方法は色々あるようですが、今回は一番簡単なGATEを使用した方法を採用しようと思います。
この方法なら、新たに特別なプラグインを使用する必要がないためです。
では、Userテーブルに還元を管理するカラムroleを追加します。
$ php artisan make:migration add_column_role_users_table --table=users
class AddColumnRoleUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->tinyInteger('role')->default(0)->after('password');
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('role');
        });
    }
}
$ php artisan migrate
単純にrole=0が一般ユーザー、role=1が管理者アカウントとします。
では、Seederを使用して、管理者アカウントを予め追加しておきます。
(これを行わないと、管理者権限を与えるユーザーが存在しないことになるので、運用できません!)
$ php artisan make:seeder UsersTableSeeder
class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => 'manager',
            'email' => 'manager@gmail.com',
            'password' => bcrypt('manager'),
            'role' => 1,
        ]);
    }
}
$ composer dump-autoload
$ php artisan db:seed --class=UsersTableSeeder

登録できました。
次は、AuthServiceProviderのboot()に処理を追加して、GATEによる権限の定義を記入します。
    public function boot()
    {
        $this->registerPolicies();
        Gate::define('manager', function ($user) {
            return ($user->role == 1);
        });
        Gate::define('user', function ($user) {
            return ($user->role == 0);
        });
    }
これで、role=1(manager)、role=0(user)がGATEによって定義されました。
では、Viewを書き換えて、一般ユーザーには不要なメニューを表示させないようにします。
<div class="panel-body">
    <detail-component></detail-component>
    <div>{{ Html::Link('/management/create', '追加', ['class' => 'btn']) }}</div>
</div>
@can('manager')
<div>{{ Html::link('/management/schedule', 'スケジュール', ['class' => 'btn']) }}</div>
<div>{{ Html::link('/management/total', '集計', ['class' => 'btn']) }}</div>
<div>{{ Html::link('/room', '部屋一覧へ', ['class' => 'btn']) }}</div>
<div>{{ Html::link('/management/checkout', '本日のチェックアウト', ['class' => 'btn']) }}</div>
@endcan
ポイントは@can(権限)〜@canend。
@can(権限)に権限の名前を入れることで、ユーザーの権限に対して@can(権限)〜@canendの表示を切り替えることができます。
manager権限

一般ユーザー

こんな感じで、表示の切り替えができました。
では、次回からは一般ユーザーの使い勝手がいいように修正していきましょうか。