Level 122
Are you sure it's this code? Its trying to create a Role, but you don't have this in your code.
Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.
Hello i have a case where the admin already has existing permissions and i should give new ones without updating or deleting the existing ones. This is the code i have currently:
public function run()
{
$now = Carbon::now();
$formPermissions = [
['name' => 'show_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'add_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'modify_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'delete_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'show_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'add_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'modify_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'delete_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
];
$adminRole = Role::findByName('admin');
foreach ($formPermissions as $permission) {
Permission::create($permission);
$adminRole->syncPermissions($formPermissions);
}
}
}
But gives me this error:
Spatie\Permission\Exceptions\RoleAlreadyExists
A role `admin` already exists for guard `api`.
at vendor/spatie/laravel-permission/src/Exceptions/RoleAlreadyExists.php:11
7▕ class RoleAlreadyExists extends InvalidArgumentException
8▕ {
9▕ public static function create(string $roleName, string $guardName)
10▕ {
➜ 11▕ return new static("A role `{$roleName}` already exists for guard `{$guardName}`.");
12▕ }
13▕ }
14▕
1 app/Models/Role.php:53
Spatie\Permission\Exceptions\RoleAlreadyExists::create()
2 database/seeders/PermissionsSeeder.php:67
App\Models\Role::create()
I had done another code which works as expected this is the code:
public function run()
{
$now = Carbon::now();
$permissions = [
['name' => 'show_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'add_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'modify_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'delete_email_to_providers_settings', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'show_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'add_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'modify_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
['name' => 'delete_email_to_providers_template', 'guard_name' => 'api', 'created_at' => $now, 'updated_at' => $now],
];
$role = Role::where('name', 'admin')->first();
Permission::query()->insert($permissions);
$role->givePermissionTo(Permission::whereIn('name', array_column($permissions, 'name'))->get());
}
But i was told : you can give permissions directly what is wrong with the first code?
Please or to participate in this conversation.