laravel - 允许多个中间件 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 以实现这一目标?请帮忙
如果您还有其他想法,也可以建议我...
解决方案
我认为最好通过路线来完成。
对于学生后卫:
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
});
推荐阅读
- c# - 使用gridview在itemtemplate上自定义分页
- javascript - jQuery获取选择的新选择/未选择元素的值
- database - 如何理解Mongo监视器中的“scanned”和“scanned_objects”?
- groovy - Groovy:日期时间增量和 JsonOutput.toJson
- c - constant-time implementation of variable rotation RC6 cipher
- html - 如何在按钮单击时创建材料卡?
- php - Rest API 字段要求
- android - 在 Android Studio 中跨不同开发者机器共享 android 调试证书
- node.js - Jest: Find out if current module is mocked during runtime
- node.js - 在多个内核上运行 npm run build 命令