Решать ошибку защиты маршрутов в laravel

У меня есть система маршрутов в laravel, что защищают пользователей guests ввождения admin dashboard, проблема состоит в том, что я только могу блокировать посетителей и не "нормальных" пользователей (А именно пользователи, которые покупают вещи, посетители не могут покупать).

Попробуйте делать middleware, который блокирует их, но не функционирует хорошо, мне хотелось бы знать, как упорядочивать это.

Это маршрут, который я хочу защитить

Route::get('/admin', [
    'uses' => 'AdminController@getAdmin', 
    'as' => 'admin.dashboard',
    'middleware' => 'auth', 'admin' //Es el modulo de entrar al admin, solo usuarios registrados lo pueden usar
]);

middleware auth, который приходит из-за default в одиноком Laravel, удается защитить dashboard пользователей, не зарегистрированных, а именно пользователь, который зарегистрировался обычно, может входить когда пишут url и я нуждаюсь в том, чтобы уклониться от этого, но не как

Это мой код, вводят пользователи, используя в UserController, если они нуждаются в информации об этом

<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use App\Http\Requests;
use Auth;
use Redirect;

class UserController extends Controller
{
    public function getSignup(){
        return view('user.signup'); //Manda al usuario al signup
    }

    public function postSignup(Request $request){ //Crear el usuario
        $this->validate($request, [
            'email' => 'email|required|unique:users',
            'password' => 'required|min:4'
        ]); //Valida al usuario deacuerdo si es unico y su clave es mayor a 4

        $user=new User([
            'email' => $request->input('email'),
            'password' => bcrypt($request->input('password')),

        ]);

        $user->save(); //Salva al usuario
        Auth::login($user); //Arranca la sesion
        return redirect()->route('user.profile');
    }

    public function getSignin(){
        return view('user.signin');
    }

    public function postSignin(Request $request){ //Inicio de sesion
        $this->validate($request, [
            'email' => 'email|required',
            'password' => 'required|min:4'
        ]); //Valida los campos

        if(Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password'), 'type' => 'cliente'])){
          return redirect()->route('user.profile');
        } //Valida si el usuario es un cliente

        if(Auth::attempt(['email' => $request->input('email'), 'password' => $request->input('password'), 'type' => 'admin'])){
            return redirect()->route('admin.dashboard');
          } //Valida si el usuario es un admin

        return redirect()->back();
        }

    public function getProfile(){
        return view('user.profile');
    }

    public function getLogout(){
      Auth::logout();
      return redirect()->route('product.index');
    }
    }

Это код, который у меня есть в Миддлеваре де Аутентикатион

<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('user.signin');
        }
    }
}

Это - то, что у меня есть в AdminMiddleware

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;
use Redirect;

class AdminMiddleware
{
    /**
     * Handel an Incoming request.
     * 
     * @param \Illuminate\Http\Request $request
     * @param \Closure
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(Auth::user()->type == 'admin')
        {
            return redirect()->route('admin.dashboard');
        }
        else
        {
            return redirect('product.index');
        }

    }
}

Это - то, что у меня есть в Kernel.php, middleware, если он инициализировался

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
        'admin' => \App\Http\Middleware\AdminMiddleware::class,
    ];

    /**
     * The priority-sorted list of middleware.
     *
     * This forces non-global middleware to always be in the given order.
     *
     * @var array
     */
    protected $middlewarePriority = [
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\Authenticate::class,
        \Illuminate\Routing\Middleware\ThrottleRequests::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Illuminate\Auth\Middleware\Authorize::class,
        \Illuminate\Auth\Middleware\Authorize::class,
        \App\Http\Middleware\AdminMiddleware::class,
    ];
}

Так это что, как у меня есть таблица users, по какому-то разуму AdminMiddleware оно не общается с нею, или не знает, как делать это

CREATE TABLE `users` (
  `id` bigint(20) UNSIGNED NOT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'cliente',
  `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
0
задан 04.11.2019, 01:32
1 ответ

Я верю в то, что проблема это estГЎs имея в método handle de AdminMiddleware. Попытайся делать это таким образом:

 public function handle($request, Closure $next)
{
    if(!Auth::user()->type == 'admin') {
        return redirect('product.index');
    }
}
0
ответ дан 01.12.2019, 12:52