Я использую Доверьте промежуточное ПО отсюда. Все идет нормально, за исключением случаев, когда я хочу открыть определенную страницу администратору при вошел в систему и любому пользователю Не вошел.
С помощью здесь я добавил следующее промежуточное ПО, но когда я нажимаю URL-адрес, он говорит, что слишком много перенаправлений.
namespace App\Http\Middleware;
use App\Models\User;
use App\Models\Role;
use Closure;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Database\Eloquent\Collection;
class CheckPermission {
/**
* The Guard implementation.
*
* @var Guard
*/
protected $auth;
/**
* Create a new filter instance.
*
* @param Guard $auth
* @return void
*/
public function __construct( Guard $auth )
{
$this->auth = $auth;
}
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle( $request, Closure $next )
{
if ( $this->auth->guest() )
{
$user = new User;
$user->id = 0;
$user->username = 'Guest';
$role = Role::find(9);// EXPLANATION OF 9 IS GIVEN BELOW UNDER CODE
$user->roles = new Collection;
$user->roles->add( $role );
}
else
{
$user = $this->auth->user();
}
// Automatically check permission based on route name
/*
if ( !$user->can( $request->route()->getName() ) )
{
// Handle denied permission, e.g. abort(401)
}
*/
return $next( $request );
}
}
Изменение базы данных: в таблице roles Я добавил строку с идентификатором 9 и именем guest.
Как я могу добавить гостевую поддержку в Entrust, чтобы любой пользователь, который не вошел в систему, считался гостем, и ему также было разрешено посещать определенные маршруты.
Мой сайт использует Entrust для уровня контроля доступа. На определенном этапе мне нужно открыть страницу (то есть какую-то регистрацию) любому пользователю, не вошедшему в систему. В противном случае, если бы ACL не существовало, рассматриваемая проблема не возникла бы.
Верно, но почему нельзя просто исключить этот маршрут из промежуточного программного обеспечения?
Как это исключить? из промежуточного программного обеспечения, которое я показал, или из kernel.php?
Я мог бы предположить, что вы использовали группу маршрутов или что-то в этом роде, чтобы назначить это промежуточное ПО для маршрутов, не так ли?
Также имейте в виду, что администратор должен иметь возможность получить доступ к странице, когда он вошел в систему. Таким образом, простое исключение страницы из промежуточного программного обеспечения сделает ее доступной для любого пользователя, который также вошел в систему.
Позвольте нам продолжить обсуждение в чате.






Я бы лично избегал использования какого-либо глобального промежуточного программного обеспечения, связанного с авторизацией, чтобы не блокировать ваше приложение от общедоступных страниц. Используйте группы маршрутов, чтобы назначить промежуточное ПО защищенным маршрутам.
Хотя это может не вписываться в дизайн Entrust, вы также можете написать собственное промежуточное программное обеспечение, разрешающее только гостям и администраторам. Что-то вроде этого:
class AdminOrGuestMiddleware {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if ($request->user() && !$request->user()->hasRole('admin')) {
return redirect('/home');
}
return $next($request);
}
«Используйте группы маршрутов для назначения промежуточного программного обеспечения защищенным маршрутам». - Вы имеете в виду, что я должен добавить промежуточное ПО к переменной $middlewareGroups в Kernel.php?
Нет, добавьте их в $ routeMiddleware, например auth и guest. Группы промежуточного программного обеспечения почти глобальны.
позвольте мне попробовать решение сейчас
Но когда пользователь не вошел в систему, страница также перенаправляется на страницу по умолчанию. Я говорю о своем решении в OP
это не должно быть .. $ request-> user () должно быть нулевым для гостей
Как ваше промежуточное ПО будет прикреплено к моей конкретной странице (например, page123)?
Позвольте нам продолжить обсуждение в чате.
Для чего в этом сценарии нужно промежуточное ПО? Похоже, что на маршруте не должно быть промежуточного программного обеспечения, связанного с аутентификацией.