我正在laravel做項目。我想根據他的角色重定向用戶。如何使用中間件根據用戶角色進行重定向?
我的表是,
用戶有表中的字段(ID,姓名,密碼)。
角色表中有字段(id,角色)。
assigned_role表中有字段(id,role_id,user_id)。
我有用戶模型,
user.php的
public function roles()
{
return $this->belongsToMany('App\Role', 'assigned_roles', 'user_id', 'role_id');
}
對於我創建命名爲 'RoleMiddleware'
RoleMiddleware一箇中間件:
public function handle($request, Closure $next)
{
$roles = $request->user()->roles;
foreach ($roles as $role) {
if($role->name != 'super-admin')
return redirect('/user');
}
return $next($request);
}
我有這樣的中間件kernel.php文件,
Kernel.php樣子,
protected $routeMiddleware = [
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'role' => \App\Http\Middleware\RoleMiddleware::class,
];
,但現在我不知道如何使用這個中間件。當我在Route.php文件,
Route::group(['middleware' => 'web'], function() {
Route::auth();
Route::group(['middleware' => 'role'], function() {
Route::get('/home', '[email protected]');
Route::get('/user', '[email protected]');
});
});
添加此中間件但是,當我登錄過程重定向到正確的URL。但現在它可以訪問內頁而不檢查用戶是否登錄。而當我對RoleMiddleware部件發表評論時,它會阻止訪問內頁,除非用戶進行日誌記錄。
我不知道該怎麼做。
只有當用戶只有「超級管理員」角色時,纔會重定向用戶。在所有其他情況下,用戶將被重定向。 – blablabla
我不明白你想說什麼 – Amarja