Добавление и отзыв разрешения для определенного пользователя с определенной ролью

Я использую этот пакет https://github.com/spatie/laravel-permission для ролей и разрешения. В моем приложении у меня есть несколько ролей, например:

  1. Пользователи
  2. Работодателей
  3. Владельцы магазинов
  4. Продавцы

В зависимости от уровня доверия я хочу, чтобы каждый человек в определенной роли имел доступ только к определенным разрешениям. Для пользователя роли user с идентификатором 7 я хочу, чтобы у него были разрешения _3 _, «покупки» и никаких других разрешений.

Другой пользователь с идентификатором 65 в той же роли user может иметь разрешения _6 _, "покупки_7 _", "просмотр карт".

Когда я смотрю документы https://docs.spatie.be/laravel-permission/v3/basic-usage/role-permissions/

может ли пользователь с определенной ролью получить разрешение, отличное от разрешения другого пользователя с той же ролью?


person Gandalf    schedule 29.01.2020    source источник


Ответы (2)


нравится.?

конкретная роль пользователя и разрешения, которыми вы можете управлять

$user = User::find(7);

$user->assignRole("user"); // assign role to that user

$user->givePermissionTo(['editor','shopping']); // for giving permission to user

$user->revokePermissionTo(['editor','shopping']); // for revoke permission to user

$user = User::find(65);

$user->assignRole("user"); // assign role to that user

$user->givePermissionTo(['editor','shopping','edit profile']); // for giving permission to user

$user->revokePermissionTo(['editor','shopping','edit profile']); // for revoke permission to user

person Kamlesh Paul    schedule 29.01.2020
comment
Это не будет делать то, что хочет оператор. Если вы примените разрешение к роли, каждый пользователь с этой ролью будет иметь это разрешение. - person Remul; 29.01.2020
comment
@Remul, я думаю, он сказал, что пользователь 7 будет иметь разные разрешения, а пользователь 65 будет иметь разные разрешения, и обе роли одинаковы user - person Kamlesh Paul; 29.01.2020
comment
@KamleshPaul Да, это то, что я сказал. Та же роль, но разные разрешения. - person Gandalf; 29.01.2020
comment
@Gandalf, я надеюсь, что это сработает для вас, просто вам нужно создать ролевые отношения, поскольку по умолчанию spatie имеет отношения от многих ко многим ролям пользователей - person Kamlesh Paul; 29.01.2020
comment
@KamleshPaul Я попробую. - person Gandalf; 29.01.2020
comment
@ Гэндальф отличный ^ _ ^ - person Kamlesh Paul; 29.01.2020
comment
@KamleshPaul Да, но ваш код этого не делает, вы применяете разрешения к роли, а не к пользователю, поэтому каждый пользователь с этой ролью будет иметь эти разрешения. - person Remul; 29.01.2020

Для этого вы можете использовать прямые разрешения.

Из документов:

Разрешение может быть дано любому пользователю:

$user->givePermissionTo('edit articles');

// You can also give multiple permission at once
$user->givePermissionTo('edit articles', 'delete articles');

// You may also pass an array
$user->givePermissionTo(['edit articles', 'delete articles']);

Разрешение может быть отозвано у пользователя:

$user->revokePermissionTo('edit articles');

//Or revoke & add new permissions in one go:    
$user->syncPermissions(['edit articles', 'delete articles']);

В твоем случае:

// assign the role to the user
$user->assignRole('user');

// assign the permissions to the user
$user->givePermissionTo(['editor', 'shopping', 'edit profile', 'view maps']);
person Remul    schedule 29.01.2020