登录 Laravel 的 Spatie laravel/权限包后如何重定向到不同的仪表板



我是Laravel的新手,我正在使用Laravel 5.8来构建应用程序。 我正在使用空间/拉拉维尔/权限包来处理应用程序的角色和权限。

一切正常,但我需要帮助,以便在登录时将不同的用户重定向到不同的仪表板。

我有四种类型的用户,即管理员,教职员工,注册商和学生。当他们登录到应用程序时,我希望每个人都被重定向到他们自己的仪表板。而不是有一个统一的仪表板。

请帮忙!

嗨,您需要为每个仪表板创建一个权限,然后在索引文件中询问哪个子视图具有权限,如果您使用的是刀片模板,您可以这样做

<div class='container'>
@if (Auth::user()->can('Admin'))
@include('dashboards.admin')
@endif
@if (Auth::user()->can('FACULTY'))
@include('dashboards.faculty')
@endif
@if (Auth::user()->can('REGISTRAR'))
@include('dashboards.registrar')
@endif
</div>

https://laravel.com/docs/6.x/authentication#included-authenticating

路径定制

成功对用户进行身份验证后,他们将被重定向到/home URI。您可以通过在LoginControllerRegisterControllerResetPasswordControllerVerificationController上定义redirectTo属性来自定义身份验证后重定向位置。

如果重定向路径需要自定义生成逻辑,则可以定义redirectTo方法而不是redirectTo属性:

protected function redirectTo()
{
return '/path';
}

在此redirectTo函数中,您可以根据用户的角色确定将用户发送到哪个路径。

您可以修改路由以对不同的角色使用不同的控制器:

Route::middleware("auth")->get("/home", function(){
$user = Auth::user();
if ($user->hasRole("admin")) {
return app()
->make(AppHttpControllersAdminDashboardController::class)
->callAction("index", []);
} else {
return app()
->make(AppHttpControllersUserDashboardController::class)
->callAction("index", []);
}
});

注意:我写的上一个答案不起作用,因为Laravel通过URL存储路由并且不关心中间件或组,因此后者总是覆盖前一个。

相关内容

最新更新