【问题标题】:Role based routing issue on laravellaravel 上基于角色的路由问题
【发布时间】:2021-08-13 13:38:18
【问题描述】:

我的 laravel 应用程序的 web.php 中有以下 2 条路由。

Route::get('/admins', 'Admin\DashboardController@index')->middleware('role:1');
Route::get('/admins', 'Admin\DashboardController@index')->middleware('role:2');

但第一条路线无法正常运行,因为它将角色 id 为 1 的用户发送到不同的路线,而不是主页的管理仪表板。

如何将bote用户发送到同一条路线?

我的登录控制器中有以下功能

public function redirectTo() {
        $role = Auth::user()->role_id; 
        switch ($role) {
          
          case '1':
            case '2':
            return '/admins';
            break;
          
            case '3':
            return '/users/profile';
            break;   
      
          default:
            return '/home'; 
          break;
        }
      }

【问题讨论】:

  • 角色ID是什么?用户现在被重定向到哪里?
  • 为什么不在 case '1' 后面加上 return and break
  • @sid 具有角色 id 2(区域管理员)的用户正在重定向到管理仪表板,但具有用户 id 为 1 的超级管理员指向主页,而不是仪表板...

标签: php laravel


【解决方案1】:
protected $redirectTo = '/home'; //Default path to redirect

public function redirectTo() {
    $role = Auth::user()->role_id;
    if($role == 1 || $role == 2){ // Check if admin or reginal admin
        $this->redirectTo = '/admins';
    }
    elseif($role == 3) { // noraml user
        $this->redirectTo = '/users/profile';
    }
    return $this->redirectTo;
}

web.php 中删除/admins 的一个路由并删除中间件检查或不传递角色ID。因为也许您正在重新检查中间件的用户角色。 您不必传递角色 ID。 可以在中间件中获取Auth::user()->role_id

【讨论】:

  • 嘿,这已经奏效了,但是如果一个普通用户登录(用户 ID 为 3)并尝试访问管理仪表板 URL,它会给出一个控制器错误而不重定向到主页...
  • 首先,为什么普通用户访问管理员的URL?如果您在与管理员相同的控制器中创建了某些方法,这不好。我更喜欢为普通用户创建一个单独的控制器。你遇到了什么错误?
猜你喜欢
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2016-06-12
  • 2012-01-01
  • 1970-01-01
  • 2015-07-17
相关资源
最近更新 更多