Laravel 権限追加
1 2 |
$ php artisan make:migration modify_users_admin_column |
これで空のマイグレーションファイルを作ってから、それを編集してフィールドを追記する。
database/migrations/YYYY_MM_DD_HHIISS_modify_users_admin_column.php
1 2 3 4 5 6 7 |
public function up() { + Schema::table('users', function ($table) { + $table->boolean('role')->default(0)->after('remember_token'); + }); } |
app/User.php に追加した権限に対応する処理を追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class User extends Authenticatable { : + /** + * 管理者か? + * @return bool true:管理者 + */ + public function isAdmin() + { + return $this->role == 1; + } } |
ポリシーの設定
モデル依存の場合は個別にPolicyファイルを作るが、全体の場合は、app/Providers/AuthServithProvider.php の boot() に直接記述する。
app/Providers/AuthServiceProvider.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
- use Illuminate\Support\Facades\Gate; : - public function boot() - { - parent::registerPolicies(); + use Illuminate\Contracts\Auth\Access\Gate; : + public function boot(Gate $gate) + { + parent::registerPolicies($gate); + + // user + $gate->define('user', function($user) { + return true; + }); + + // admin + $gate->define('admin', function($user) { + return $user->isAdmin() ? true : false; + }); } |
これで blade 内で
1 2 3 4 |
@can('admin') : @endcan |
で制御できるようになる。