Php 如何防止在Laravel中使用3类用户访问另一个页面
我对laravel cus im begginer有问题,但我对php语言的使用非常好 我的问题是: 我在数据库中为用户创建了一个表,并为类型创建了列 我的表格中有3种用户类型: 顾客-工人-工厂 如何使用middlewarre或其他阻止访问其他页面的功能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
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')) {
//...
}
文档中还有更多的使用示例: