![](/img/trans.png)
[英]How to redirect user after login to a desired page according to their role?
[英]How to redirect according to user role using middleware?
我正在 Laravel 中做項目。 我想根據他的角色重定向用戶。
我的桌子是,
具有字段(id、名稱、密碼)的用戶表。
具有字段 (id,role) 的角色表。
assigned_role表具有字段(id、role_id、user_id)。
我有用戶模型,
用戶名
public function roles()
{
return $this->belongsToMany('App\Role', 'assigned_roles', 'user_id', 'role_id');
}
為此,我創建了一個名為“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', 'HomeController@index');
Route::get('/user', 'UserController@index');
});
});
但是當我在登錄過程中它重定向到正確的 url。 但是現在它可以在不檢查用戶是否登錄的情況下訪問內頁。 而當我對 RoleMiddleware 部分發表評論時,它會阻止訪問內部頁面,除非用戶進行日志記錄。
我不知道該怎么做。
如果我理解正確的話:
/user
。正確的?
以下是如何執行此操作:
在您的 routes.php 文件中,您需要為超級管理員用戶和經過身份驗證的用戶(沒有超級管理員角色)提供路由
Route::group(['middleware' => 'web'], function () {
Route::auth();
Route::group(['middleware' => ['auth', 'role']], function () {
// All routes you put here can only be accessible to users with super-admin role
});
Route::group(['middleware' => 'auth'], function () {
// All routes you put here can be accessible to all authenticated users
});
});
在您的角色中間件中,您需要阻止沒有超級管理員角色的經過身份驗證的用戶訪問給定的 url,在這種情況下,只需將他們重定向到另一個 url
public function handle($request, Closure $next)
{
$roles = $request->user()->roles;
foreach ($roles as $role) {
if($role->name == 'super-admin')
// If user is super-admin, accept the request
return $next($request);
}
// If user does not have the super-admin role redirect them to another page that isn't restricted
return redirect('/user');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.