Переключатель столбца Laravel Sync

Я работаю над проектом для себя, и мне было интересно, есть ли хорошее решение для следующей проблемы.

На данный момент я создаю систему разрешений «пользователь> роль>».
Идея состоит в том, что когда вы создаете или обновляете роль, вы можете видеть все разрешения и использовать флажки для добавления разрешения (действительно просто).
Но я хочу добавить больше флажков для создания, чтения, обновления и удаления (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?

1

Решение

Вы должны построить массив свойств перед вызовом синхронизации, например

$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');
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector