86 lines
2.8 KiB
PHP

<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class UserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
// 1. Buat user admin jika belum ada
$admin = User::firstOrCreate(
['email' => 'admin@example.com'],
[
'name' => 'admin',
'password' => bcrypt('admin'),
]
);
$user = User::firstOrCreate(
['email' => 'teacher@example.com'],
[
'name' => 'teacher',
'password' => bcrypt('teacher'),
]
);
// 2. Buat permission terkait role satu per satu
Permission::firstOrCreate(['name' => 'view_any_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'view_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'create_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'update_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'delete_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'delete_any_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'force_delete_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'force_delete_any_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'restore_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'restore_any_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'replicate_role', 'guard_name' => 'web']);
Permission::firstOrCreate(['name' => 'reorder_role', 'guard_name' => 'web']);
// 3. Ambil semua permission yang berhubungan dengan "_role"
$rolePermissions = Permission::where('name', 'like', '%_role')->pluck('name');
// 4. Buat role super_admin jika belum ada
$role = Role::firstOrCreate([
'name' => 'admin',
'guard_name' => 'web',
]);
$teacher = Role::firstOrCreate([
'name' => 'teacher',
'guard_name' => 'web',
]);
$headmaster = Role::firstOrCreate([
'name' => 'headmaster',
'guard_name' => 'web',
]);
$parent = Role::firstOrCreate([
'name' => 'parent',
'guard_name' => 'web',
]);
// $teacher->syncPermissions($rolePermissions);
$role->syncPermissions($rolePermissions);
if (!$admin->hasRole($role)) {
$admin->assignRole($role);
}
// if (!$user->hasRole($teacher)) {
// $user->assignRole($teacher);
// }
}
}