Laravel Multi Auth使用中间件

时间:2018-04-11 14:04:50

标签: php laravel routing middleware

我创建了一个带有user_type(存储在表格中)的app作为admin,user,super_admin和Created 2中间件,例如Admin和super Admin。 当我尝试以用户身份登录并访问设置为admin的功能时,它会正确地重定向到主页,当管理员尝试正确访问其访问权限时,但当超级管理员尝试访问分配给管理员的相同功能时我已经为管理员设置了正确的参数和超级管理员路由,请看下面我的代码

这是我的管理中间件:

public function handle($request, Closure $next, $guard = 'admin')
    {

        if (Auth::user()->user_type =='admin') {
            return $next($request);
        } else {
             return redirect('home')->with('error','You have not admin access');
        }
    }

这是我的超级管理员中间件:

public function handle($request, Closure $next, $guard = 'super_admin') {

    if (Auth::user()->user_type =='super_admin') {
        return $next($request);
    } else {
         return redirect('home')->with('error','You have not admin access');
    }
}

这是我的路由web.php

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

    Route::get('/contact', 'StudentController@create')->name('contact');

    //User Activate

    Route::group(['middleware' => ['admin'], 'namespace' => 'Admin', 'prefix' => 'admin'], function(){
    	Route::resource('/admin', 'AdminController');
    	Route::get('/get-users/', 'AdminController@getUsers');
    	Route::get('/get-cfs/', 'AdminController@getCfs');
    	Route::get('/random-user/', 'AdminController@randomUser');
    	//Route::resource('/student', 'StudentController');
    });

    Route::group(['middleware' => ['superadmin'], 'namespace' => 'SuperAdmin', 'prefix' => 'superadmin'], function(){
    	Route::resource('/superAdmin', 'SuperAdminController');
    	Route::get('/get-users/', 'AdminController@getUsers');
    	Route::get('/get-cfs/', 'AdminController@getCfs');
    	Route::get('/random-user/', 'AdminController@randomUser');
    });

1 个答案:

答案 0 :(得分:0)

您没有指定超级管理员拥有管理员拥有的所有权限。您只需指定两名警卫super_adminadmin。但laravel怎么知道super_admin拥有admin拥有的所有权限?您应该实现此功能,或者您可以在admin中间件中执行此操作。

public function handle($request, Closure $next, $guard = 'admin')
{
    if (Auth::user()->user_type =='super_admin' || Auth::user()->user_type =='admin') {
        return $next($request);
    } else {
         return redirect('home')->with('error','You have not admin access');
    }
}