Laravel Entrust — добавить поддержку роли гостя

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

С помощью Вот , Я добавил следующее промежуточное программное обеспечение, но когда я нажимаю 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, чтобы любой пользователь, который не вошел в систему, будет считаться гостем, и ему также будет разрешено посещать определенные маршруты.

0

Решение

Лично я бы избегал любого глобального промежуточного программного обеспечения, связанного с авторизацией, чтобы не блокировать доступ к общедоступным страницам вашего приложения. Используйте группы маршрутов для назначения промежуточного программного обеспечения защищенным маршрутам.

Хотя это может не вписываться в дизайн 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector