Как мы можем добавить несколько проверок в промежуточное ПО для выполнения определенной проверки в Laravel - PullRequest
0 голосов
/ 03 апреля 2020

Я недавно начал изучать 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, он работает нормально, но просто проверяет наличие прав администратора или владельца. Как я могу заставить это работать для обоих? Я делаю что-то неправильно? Я пробовал много разных способов, но ни один не работает для меня

1 Ответ

0 голосов
/ 03 апреля 2020

Просто измените условие:

public function handle ($request, Closure $next) {
    if (auth()->user()->isOwner() || auth()->user()->isAdmin()) {
        return $next($request);
    } else {
        session()->flash('error', 'You are not authenticated to perform this action');
        return redirect('home');        
    }
}

Но мы используем те же правила и правила, что и пользователь блога, который может там удалить, и администратор может удалить этот блог, мы также можем использовать промежуточное ПО, если вы хотите сделать для заданного c модуля или таблиц, а затем использовать политики и вентили. С помощью политик вы можете управлять всеми операциями CRUD с различными условиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...