Я недавно начал изучать Laravel, и я разрабатывал блог CRUD, где пользователи делятся на 3 роли. Владелец, Администратор и Автор. Поэтому я хотел, чтобы владелец был самым авторитетным, кто может создавать или удалять пользователей из поста «Администратор». Второй аутентификатор должен быть администратором, который может модерировать, подтверждать или удалять сообщения из блога и может делать почти все, что может сделать владелец, но не может запретить или удалить владельца.
Поэтому я создал страницу пользователей, где список все зарегистрированные пользователи отображаются: localhost:8000/users
Теперь я хочу, чтобы только владельцы и администраторы имели доступ к этой странице, а не авторы. Поэтому для достижения этой цели я создал две функции в модели User, чтобы проверить, является ли пользователь владельцем (isOwner()
) и является ли пользователь администратором (isAdmin()
), а затем создал промежуточное ПО. Теперь в промежуточном программном обеспечении я хочу добавить правило, что если пользователь является владельцем или администратором, разрешите им доступ к странице пользователей, в противном случае верните их обратно на домашнюю страницу и отправьте сообщение об ошибке sh. Код моего промежуточного программного обеспечения ниже
public function handle ($request, Closure $next) {
if (!auth()->user()->isOwner() || !auth()->user()->isAdmin()) {
session()->flash('error', 'You are not authenticated to perform this action');
return redirect('home');
}
return $next($request);
}
Но это не так, как я хочу. Это только сейчас позволяет любому получить доступ к странице пользователей. Когда я удаляю оператор OR (||) из оператора if, он работает нормально, но просто проверяет наличие прав администратора или владельца. Как я могу заставить это работать для обоих? Я делаю что-то неправильно? Я пробовал много разных способов, но ни один не работает для меня