Php 如何防止在Laravel中使用3类用户访问另一个页面

Php 如何防止在Laravel中使用3类用户访问另一个页面,php,laravel,routes,middleware,Php,Laravel,Routes,Middleware,我对laravel cus im begginer有问题,但我对php语言的使用非常好 我的问题是: 我在数据库中为用户创建了一个表,并为类型创建了列 我的表格中有3种用户类型: 顾客-工人-工厂 如何使用middlewarre或其他阻止访问其他页面的功能 public function Signupuser(Request $request){ $email=$request['email']; $username=$request['username']; $tell

我对laravel cus im begginer有问题,但我对php语言的使用非常好 我的问题是:

我在数据库中为用户创建了一个表,并为类型创建了列 我的表格中有3种用户类型: 顾客-工人-工厂

如何使用middlewarre或其他阻止访问其他页面的功能

public function Signupuser(Request $request){
    $email=$request['email'];
    $username=$request['username'];
    $tell=$request['mobilenumber'];
    $pass=bcrypt($request['password']);
    $status_reg=$request['status_register'];

   $usertable=new UserTable();
   $usertable->username=$username;
   $usertable->email=$email;
   $usertable->Password=$pass;
   $usertable->Tell=$tell;
   $usertable->StatusReg=$status_reg;
   $usertable->save();
   Auth::login($usertable);
   if($status_reg=='factory'){
       return redirect()->route('FactoryDashboard');
   }
    if($status_reg=='worker'){
        return redirect()->route('WorkerDashboard');
    }
    if($status_reg=='customer'){
        return redirect()->route('CustomerDashboard');
    }

}

public function signinuser(Request $request){
    $email=$request['email'];
    $pass=$request['pass'];
    if (Auth::attempt(['email'=>$email,'password'=>$pass])){
        $status = Auth::user()->StatusReg;

        return $status;

    }
    else{
        return "nokey";
    }

}
我使用了一个中间件,但这个中间件不起作用

<?php
  namespace App\Http\Middleware;
  use App\UserTable;
   use Closure;

  class WorkerMiddleware
  {
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    if($request->user() && $request->user()->StatusReg !='worker'){
        return redirect('homepage');
    }
    return $next($request);
}
}

通常使用Laravel的授权服务处理您的场景

例如,您可以将以下内容添加到
app\Providers\AuthServiceProvider.php
文件中:

Gate::define('factory', function ($user) {
    return $user->StatusReg == 'factory';
});

Gate::define('worker', function ($user) {
    return $user->StatusReg == 'worker';
});

Gate::define('customer', function ($user) {
    return $user->StatusReg == 'customer';
});
然后您可以在应用程序中使用它,如下所示:

if (Gate::allows('worker')) {
    //...
}

if (Gate::denies('customer')) {
    //...
}    
文档中还有更多的使用示例: