首页 > 解决方案 > 允许多个中间件 laravel 的控制器方法访问

问题描述

我正在开发一个具有多重身份验证的项目,该项目将管理员、学生和教师作为三个级别的身份验证。我已将默认可验证用户模型更改为学生,并添加了另外两个具有自己登录名的可验证模型。

我有 CourseController 如下:

    use App\Course;
        use App\Invoice;
        use Illuminate\Http\Request;
        use Illuminate\Support\Facades\Auth;

    class CourseController extends Controller
    {

        public function __construct()
        {
            $this->middleware('auth', ['only' => ['index']]);
            $this->middleware('auth:teacher', ['only' => ['index']]);
            $this->middleware('auth:admin', ['only' => ['index', 'create', 'store', 'edit', 'update', 'delete', 'search', 'destroy']]);
        }

        /**
         * Display a listing of the resource.
         *
         * @return \Illuminate\Http\Response
         */
        public function index()
        {
            $data = Course::get();
            if (Auth::user()->role == 'admin') {
                return view('admin.course.index', compact('data'));
            } elseif (Auth::user()->role == 'student') {
                return view('student.course.index', compact('data'));
            } elseif (Auth::user()->role == 'teacher') {
                return view('teacher.course.index', compact('data'));
            }
        }
    }

config/auth.php 如下:(默认守卫是学生)

'defaults' => [
        'guard'     => 'web',
        'passwords' => 'students',
    ],    

    'guards' => [
        'web' => [
            'driver'   => 'session',
            'provider' => 'students',
        ],

        'api' => [
            'driver'   => 'token',
            'provider' => 'students',
        ],

        'admin' => [
            'driver'   => 'session',
            'provider' => 'admins',
        ],


        'admin-api' => [
            'driver'   => 'token',
            'provider' => 'admins',
        ],

        'teacher' => [
            'driver'   => 'session',
            'provider' => 'teachers',
        ],


        'teacher-api' => [
            'driver'   => 'token',
            'provider' => 'teachers',
        ],
    ],

我的问题:

我希望所有三个警卫都可以访问 CourseController@index 并将 $data 传递给他们各自的视图。我将如何修改 CourseController 以实现这一目标?请帮忙

如果您还有其他想法,也可以建议我...

标签: laravellaravel-5middlewareguard

解决方案


我认为最好通过路线来完成。

对于学生后卫:

Route::group(['middleware' => ['auth']], function () { Route::get('student.course.index', 'CourseController@index'); });

对于老师守卫:

Route::group(['middleware' => ['auth:teacher']], function () { Route::get('teacher.course.index', 'CourseController@index'); });

对于管理员守卫:

Route::group(['middleware' => ['auth:admin']], function () { Route::get('admin.course.index', 'CourseController@index'); //other routes });


推荐阅读