首页 > 解决方案 > 如何在 Laravel 5.6 中创建具有多个角色的中间件?

问题描述

我正在使用 Sentinel 包,例如我创建了中间件PCMiddleware

public function handle($request, Closure $next)
    {
        $roles = array_slice(func_get_args(), 2); 

        foreach ($roles as $role) {

            if(Sentinel::check() && Sentinel::getUser()->inRole($role)){
                return $next($request);
            } else {
                return redirect()->route('admin.errors');
            }
        }    
    }

路线

$route->get('dashboard', ['as' => 'dashboard', 'uses' => 'AdminController@dashboard'])->middleware('role_check:member,hrd,super-admin');

我也创建了具有角色hrd的用户,任何具有 hrd 角色的用户都可以访问仪表板,但是当我登录时,即使我只有 hrd 角色,404我如何才能访问?/dashboard

如果用户具有这 3 个角色中的任何一个,那么他可以访问该路线,

标签: laravellaravel-5

解决方案


在 Laravel 中已经有一种方法可以为中间件传输参数。你可以在这里阅读

public function handle($request, Closure $next)
{
    $roles = array_slice(func_get_args(), 2); 

   $status = false;

    foreach ($roles as $role) {

        if(Sentinel::check() && Sentinel::getUser()->inRole($role)){
            $status = true;
             break;
        }
    }    

      if ($status) {
           return $next($request);
       } 
     return redirect()->route('admin.errors');
}

在此示例中,如果至少存在一个传递的参数,您的代码将起作用


推荐阅读