Laravel App имеет роли, и у каждого Role
есть разрешения (от многих ко многим)
Каждый пользователь имеет несколько ролей (от многих ко многим)
Когда права Роли изменяются / обновляются, запускается Событие RolePermissionsChanged
, и слушатель имеет следующий код:
public function handle(RolePermissionsChanged $event)
{
$role_permissions=$event->role()->permissions;
foreach ($event->role()->users as $user) {
$user->permissions()->sync($role_permissions);
}
}
Это должно обновить permission_user
таблицу для синхронизации ролей с пользователем. Когда событие инициируется, задание завершается с ошибкой:
Method Illuminate\Database\Eloquent\Collection::sync does not exist.
Если я изменю строку в цикле foreach
на App\User::find($user->id)->permissions()->sync($role_permissions);
, она будет работать, но я знаю, что это нужно сделать другим способом. Кто-нибудь может направить меня туда, куда я иду не так.
Edit:
Ниже RolePermissionsChanged::class
<?php
namespace App\Events\Auth;
use Illuminate\Queue\SerializesModels;
use Illuminate\Foundation\Events\Dispatchable;
use App\Role;
class RolePermissionsChanged
{
use Dispatchable, SerializesModels;
public $role;
public function __construct(Role $role)
{
$this->role=$role;
}
}