Files
portal-api/database/seeders/FixRoleGuardSeeder.php

95 lines
3.0 KiB
PHP

<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
/**
* Sửa guard_name từ 'admins' → 'admin' cho tất cả roles & permissions.
* Chạy 1 lần: php artisan db:seed --class=FixRoleGuardSeeder
*/
class FixRoleGuardSeeder extends Seeder
{
public function run(): void
{
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
// Cập nhật permissions
DB::table('permissions')
->where('guard_name', 'admins')
->update(['guard_name' => 'admin']);
// Cập nhật roles
DB::table('roles')
->where('guard_name', 'admins')
->update(['guard_name' => 'admin']);
$this->command->info('✅ Đã cập nhật guard_name: admins → admin cho ' .
Role::where('guard_name', 'admin')->count() . ' roles, ' .
Permission::where('guard_name', 'admin')->count() . ' permissions.');
// Đảm bảo 6 roles tồn tại với guard admin
$roles = [
'Full Administrator',
'Administrator',
'Sale',
'IT',
'Customer Service',
'Marketing',
];
foreach ($roles as $name) {
Role::firstOrCreate([
'name' => $name,
'guard_name' => 'admin',
]);
}
// Full Administrator luôn có tất cả permissions
$fullAdmin = Role::where('name', 'Full Administrator')
->where('guard_name', 'admin')
->first();
if ($fullAdmin) {
$fullAdmin->syncPermissions(
Permission::where('guard_name', 'admin')->get()
);
$this->command->info('✅ Full Administrator đã được cấp tất cả quyền.');
}
// Administrator được cấp một số quyền cơ bản
$admin = Role::where('name', 'Administrator')
->where('guard_name', 'admin')
->first();
if ($admin) {
$adminPermissions = [
'customer.view',
'customer.create',
'customer.edit',
'customer.manager',
'product-service.view',
'product-service.create',
'product-service.edit',
'product-service.manager',
'order.view',
'order.create',
'order.edit',
'order.manager',
'administrator.view',
'administrator.manager',
];
$perms = Permission::whereIn('name', $adminPermissions)
->where('guard_name', 'admin')
->get();
$admin->syncPermissions($perms);
$this->command->info('✅ Administrator đã được cấp quyền: ' . implode(', ', $adminPermissions));
}
app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
}
}