如何在中间件中传递多个门? (Laravel)

问题描述 投票:0回答:1

我正在为我的大学期末项目(仅在最近引入laravel中创建一个学习管理系统)。我设置了三个不同的角色(管理员,讲师和学生)。我创建了两个视图,“管理员”和“课程管理”仅管理员和管理员可以访问。在每个管理员和讲师内,可以创建用户/课程并根据需要删除。.学生无法查看这些内容或可以访问这些内容,从而可以按需运行。为此,我创建了一个门“ manage-user”,然后将其传递给中间件。

我现在已经创建了一个日历,我希望所有用户角色都可以查看。...我再次为此创建了一个门。.由于我当前的中间件,当学生尝试查看日历时,我获得了“未经授权的访问”。 。是否可以在中间件中传递另一个门?我尝试这样做没有成功。.经过多次尝试和错误,我在这里提出了一个问题,希望我能解决这个问题...我将在下面粘贴我的代码。

AuthServiceProvider.php

public function boot()

{
    $this->registerPolicies();
    //User Management
    Gate::define('manage-users', function($user){
        return $user->hasAnyRoles(['admin', 'instructor']);
    });
    //Calendar
    Gate::define('manage-calendar', function($event){
        return $event->hasAnyRoles(['admin', 'instructor', 'student']);
    });

web.php

    Route::get('/', function () {
        return view('welcome');
    });

    Auth::routes();

    Route::get('/home', 'HomeController@index')->name('home');


    Route::namespace('Admin')->prefix('admin')->name('admin.')->middleware('can:manage-users')->group(function(){
        //Users
        Route::resource('/users', 'UsersController', ['except' => ['show']]);
        //Courses
        Route::resource('/courses', 'CoursesController', ['except' => ['show']]);



        Route::get('events', 'EventsController@index')->name('events.index');
        Route::post('/addEvents', 'EventsController@addEvent')->name('events.add');

    });

我知道问题出在我定义的登机门管理用户之内。我不确定该采取什么方法来保护我的其他路线免遭学生和讲师的侵扰...

提前感谢:)

laravel laravel-5 laravel-middleware laravel-gate
1个回答
0
投票

manage-users Gate不允许具有student角色的用户浏览中间件,即使manage-calendar Gate允许。

我建议您将路由重新组合以应用与每个路由相对应的中间件:

Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function(){
    Route::middleware('can:manage-users')->group(function(){
        Route::resource('/users', 'UsersController', ['except' => ['show']]);
        Route::resource('/courses', 'CoursesController', ['except' => ['show']]);
    });
    Route::middleware('can:manage-calendar')->group(function(){
        Route::get('events', 'EventsController@index')->name('events.index');
        Route::post('/addEvents', 'EventsController@addEvent')->name('events.add');
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.