如何在Laravel 5.6中创建具有多个角色的中间件?

时间:2018-08-05 12:34:46

标签: laravel laravel-5

我正在使用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角色的任何用户都可以访问仪表板,但是当我以404登录最终用户时,如何访问{{1} },即使我只担任hrd角色?

如果用户具有这三个角色中的任何一个,则可能会这样,然后他可以访问路由,

1 个答案:

答案 0 :(得分:1)

在Laravel中已经有一种为中间件传递参数的方法。您可以阅读有关here

的信息
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');
}

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