Я работаю над проектом для себя, и мне было интересно, есть ли хорошее решение для следующей проблемы.
На данный момент я создаю систему разрешений «пользователь> роль>».
Идея состоит в том, что когда вы создаете или обновляете роль, вы можете видеть все разрешения и использовать флажки для добавления разрешения (действительно просто).
Но я хочу добавить больше флажков для создания, чтения, обновления и удаления (CRUD).
Настройка на данный момент выглядит следующим образом:
Ролевая таблица:
string name
Таблица разрешений:
string name
Таблица PermissionRole:
uint role_id, uint permission_id, boolean create, boolean read, boolean update, boolean delete
Чтобы добавить разрешения для роли, я использую метод sync ().
Пример:
$role->permissions()->sync([1 => ['create' => 1, 'update' => 1], 2 => ['create' => 1]]);
И это прекрасно работает. Но, когда я обновляю вместо вставки и, например, я снимаю флажок «создать» при первом разрешении, для создания не будет установлено значение «ложь», потому что форма больше не отправляет флажок создания.
Есть ли способ использовать метод синхронизации и позволить ему по умолчанию устанавливать для не добавленных полей значение false?
Вы должны построить массив свойств перед вызовом синхронизации, например
$crudPermission1 = [
'create' => $request->has('permissions.1.create'),
'read' => $request->has('permissions.1.read'),
'update' => $request->has('permissions.1.update'),
'delete' => $request->has('permissions.1.delete')
];
$role->permissions()->sync([1 => $crudPermission1]);
Это был простой пример, вам нужно будет создать цикл, чтобы сделать это автоматически для каждого разрешения.
Вы должны принять во внимание:
update
, он останется нетронутым.$request->has('checkbox-name');
Других решений пока нет …