Вы можете использовать такой пакет, как Spatie / laravel -permission
Этот пакет позволяет управлять разрешениями и ролями пользователей в базе данных.
После установки вы можете делать что-то вроде этого:
// Adding permissions to a user
$user->givePermissionTo('edit articles');
// Adding permissions via a role
$user->assignRole('writer');
$role->givePermissionTo('edit articles');
Поскольку все права будут зарегистрированы на Laravel воротах, вы можете проверить, есть ли у пользователя разрешение с помощью Laravel ' По умолчанию может работать:
$user->can('edit articles');
Если вы хотите создать собственное управление ролями-разрешениями, вы можете сделать что-то вроде следующего:
Создать roles
, permissions
Таблица. Затем сохраните каждый role_id и их разрешения в таблице roles_permissions
.
Примечание. Вы можете кэшировать эту ассоциацию role_permissions в Redis
, чтобы избежать повторных запросов к БД
You следует добавить соответствующий role id
в таблицу Users
.
Теперь напишите функцию, чтобы проверить, имеет ли заданная роль c установленное разрешение.
checkUserHasPermission(String $permissionKey, User $user):bool
{
$rolePermissions = functionToGetPermissionForRole($user->role);
return (boolean) in_array($permissionKey, $rolePermissions);
}
functionToGetPermissionForRole($roleId):array
{
// add your logic to return the permissions associated with the specific role id
}
Примечание: Если вы кэшируете свою ассоциацию role_permissions в Redis, не забудьте обновить Redis при обновлении ролей и разрешений.