当前位置: 首页 > 知识库问答 >
问题:

LoginController(Auth)中基于角色的路由

靳涵亮
2023-03-14

在我的Laravel 5.3设置中,我使用Bouner包,我定义了两个角色,admin顾客。登录后,客户将被重定向到/home,如在App\Http\Controller\Auth\LoginController.php下的protected$reDirectTo='/home';中指定的。现在,如果具有admin角色的用户登录,他也会被重定向到/home,因为$reDirectTo不会对用户角色进行任何区分。我在这里的目标是将管理员用户重定向到/admin/home

处理此问题的最佳解决方案是什么?这是我的尝试。

web.php路由中,在任何中间件组之外:

Route::get('/home', function(Illuminate\Http\Request $request) { // http://myapp.dev/home
    if (Auth::user()->isA('customer')) // -> goto HomeController@index
        return app()->make('\App\Http\Controllers\HomeController')->index($request);
    else if (Auth::user()->isAn('admin')) // -> redirect
        return redirect('/admin/home');
    else
        abort(403);
})->middleware('auth');

Route::group(['prefix' => 'admin','middleware' => 'auth'], function () {
    Route::get('/home', 'Admin\HomeController@index');
});

或者,这也可以在中间件中完成:

Route::get('/home', 'HomeController@index')->middleware('auth', 'role');

// in VerifyRole.php middleware...    
public function handle($request, Closure $next, $guard = null)
{
    if (Auth::user()->isAn('admin')) {
        return redirect('/admin/home');
    }

    return $next($request);
}

这可以工作,但如果添加更多角色,则无法伸缩。我相信一定有一种优雅的内置方式来实现这一点。所以问题是,我如何根据用户的角色将他们路由到他们适当的仪表板(即home)?

共有2个答案

薄烨
2023-03-14

在Laravel 5.3中,您可以重写AuthController.php中的sendLoginSolutions()方法,以便能够在登录后将用户重定向到不同的路由。

商飞龙
2023-03-14

您可以在类App\Http\Controller\Auth\LoginController中将验证()方法重写为:

protected function authenticated(Request $request, $user)
{
    if ($user->isA('customer'))
        return redirect('/home');
    else if ($user->isAn('admin'))
        return redirect('/admin/home');
}

可以将reDirectPath()方法重写为:

public function redirectPath()
{
    if (auth()->user()->isA('customer'))
      return '/home';
    else if (auth()->user()->isAn('admin'))
      return '/admin/home';
}
 类似资料:
  • 我有一个小难题来解决这个问题。 我有一个用户和一个管理员角色。 用户应该能够列出除管理员以外的所有用户。管理员可以列出所有用户。 我想到的第一个解决方案是检查控制器级别的角色: 但是我更想做的是在路线层面上,保持控制器更干净,但不知何故它确实起作用了。它只列出用户,即使我作为管理员登录。 有什么建议吗?谢谢!

  • 我希望使用相同的路由路径,根据用户角色为我的用户加载稍微不同的视图。 以前,我已经加载了基于当前域的不同路由: 这种方法只依赖于子域,子域在创建时可用,因此所有内容都可以是同步的。我必须对用户进行身份验证,根据其角色加载正确的路由,然后导出路由器以初始化vue应用程序。 理想情况下,我可以加载基于用户角色的,,,其中可以包含角色的所有路由定义。 我正在使用Feathers-vuex,但我似乎不能等

  • 本文展示了如何根据不同的用户角色,在登录之后来重定向到不同的页面。 在 method-security项目的基础上,我们构建了一个role-base-login项目。 build.gradle 修改 build.gradle 文件,让我们的role-base-login项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName = 'role-bas

  • 我在身份管理方面有一个项目,我希望有人能给我指出正确的方向。这是基于角色的配置,基本上我需要知道如何根据某些用户属性(例如职位、部门)配置特定的应用程序,然后自动为该应用程序提出配置请求。该应用程序是一个断开连接的应用程序,将手动配置。 我们试图实现的是,一旦在 OIM 中创建了用户,并且如果他或她满足这些条件,OIM 将生成对应用程序的请求,以便为它们预配它们。有没有办法在 OIM 中实现此目的

  • 我对Spring靴还不熟悉。我需要在spring boot中实现基于角色的授权。我有不同的角色,多个用户将映射到每个角色。每当调用api时,我都会设置不同的访问权限(读取、添加、删除、编辑),需要检查访问权限并允许权限。我计划使用拦截器调用具有查询的方法,以从DB获取访问权限,并拒绝或访问api。有没有其他更好的方法我可以用同样的方法?

  • 问题内容: 我正在寻找有关其他人如何设计此方法的意见。我将提供基于类(Django组)的视图。 例如,用户组将确定他或她将有权访问哪些视图/模板。我正在考虑也许在表中存储用于查看功能的路径,以确定用户的链接栏将由什么组成。过滤器规范也可以存储,以确定哪些行将填充这些模板。 医院护理单位就是一个很好的例子。一个单位的护士不必看整个医院的病人。他们只需要去看病人。同一部门的医生也只需要看望那些患者,但