laravel-adminのMenu設定をエクスポートして、seederに追加することで初期Migration時にデータを戻す方法を考えました。
laravel-adminのメニューやロールの初期設定を開発画面で作っておいて別環境で再現するなど。
admin:export-seedではMenuやRoleの情報しかExportされない
php artisan admin:export-seed
Admin tables seed file was created: /database/seeds/AdminTablesSeeder.php
Use: php artisan db:seed --class=AdminTablesSeeder
上記のコマンドで設定が全部エクスポートされたよわーい!と思ってdb:seedしても、管理画面にログインできない。どうやらこのエクスポートされたSeederを見る限り、ユーザー情報が含まれていないように見える。
admin useraのseederは別で作らないといけないようだ。。。
こちらの記事を参考にlaravel-admin初期設定のSeederをコピーします。
ファイル名をクラス名をAdminUsersSeederに変更して、// create a user.〜role部分だけ使って以下のように修正。
<?php
use Illuminate\Database\Seeder;
use Encore\Admin\Auth\Database\Administrator;
use Encore\Admin\Auth\Database\Role;
use Encore\Admin\Auth\Database\Permission;
class AdminUsersSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// create a user.
Administrator::truncate();
Administrator::create([
'username' => 'admin',
'password' => bcrypt('admin'),
'name' => 'Administrator',
]);
// create a role.
Role::truncate();
Role::create([
'name' => 'Administrator',
'slug' => 'administrator',
]);
// add role to user.
Administrator::first()->roles()->save(Role::first());
// 別のユーザー(例:staff)やロールを初期状態で追加しておく場合
Administrator::create([
'username' => 'staff',
'password' => bcrypt('staff'),
'name' => 'staff',
]);
// create a role.
Role::create([
'name' => 'staff',
'slug' => 'staff',
]);
// add role to user.
Administrator::find(2)->roles()->save(Role::find(2));
}
}
AdminUsersSeeder, AdminTablesSeederをDatabaseSeederに追加。
public function run()
{
$this->call(AdminUsersSeeder::class);
$this->call(AdminTablesSeeder::class);
}
これで、admin/adminでログインできる初期ユーザーと、GUIで設定したmenu,role,permisson情報がシーダーにエクスポートされました。
php artisan migrate:fresh
php artisan db:seed
上記のコマンドを実行して、ユーザーとメニューが戻ることを確認。
以後、メニューや権限を編集した場合は、再度
php artisan admin:export-seed
で、設定がSeederにエクスポートされます。
ユーザーを追加した場合は?手動でファイルに追記してください・・・