У меня есть 3 таблицы: users
; permissions
; user_permissions
.
Моя сводная таблица (user_permissions
) имеет 2 столбца: user_id иmissions_id.
Как бы я мог удалить разрешение для пользователя, используя имя разрешения или массив разрешений?
Так, например, я мог бы иметь:
array:1 [
0 => "access_documentation"
]
Или я мог бы иметь это:
array:4 [
0 => "general_user"
1 => "access_pagespeed"
2 => "access_documentation"
3 => "access_admin"
]
У меня есть отношение к разрешениям пользователей, которое возвращает имена.
public function permissions()
{
return $this->belongsToMany(Permission::class, 'user_permissions');
}
Что я основал на ответах, представленных ниже:
public function save(User $user, Request $request)
{
$params = Permission::query()->whereIn('name', $request->input('data'));
if ($params->count() === 0) {
return;
}
$params = $params->pluck('id')->toArray();
$user->permissions()->detach();
// $user->permissions()->attach(6);
// $user->permissions
}
Редактировать
Мои разрешения разделены на категории, поэтому при их обновлении я отправляю только массив разрешений для этой категории, поэтому выполнение $user->permissions()->detach()
отсоединит несвязанные разрешения.
Есть ли способ, которым я могу сказать только отсоединить или синхронизировать все с определенным идентификатором категории?
Пример user_permissions
id user_id permission_id
1 32 1
Пример permissions
id name category_id
1 edit_users 3
** Редактировать 2 **
$params
возвращает выбранные разрешения в этой категории, поэтому на основе изображения ниже будет массив [ 'general_user', 'access_pagespeed', 'access_admin' ]
. Если бы я щелкнул четвертый пункт в списке ниже, тогда $params
тогда, конечно, было бы [ 'general_user', 'access_pagespeed', 'access_admin', 'access_documentation' ]
.