2017-08-02 105 views
0

我有问题,在我的Route::middleware中使用多个参数对我来说不起作用。我试图分配一个特定的路线,只能访问超级用户admin角色。Laravel路由中的多个参数middelware不起作用

当我只是用:

role:superuser 

它工作正常,但是当我添加第二个参数,如:

role:superuser,admin 

失败的时候我给你自己的管理员作用,但仍然有效为超级用户作用。

我很困惑,所以任何帮助将不胜感激!


这里是我的RoleMiddleware:

namespace App\Http\Middleware; 

use Closure; 

class RoleMiddleware 
{ 

/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @param string $roles 
* @return mixed 
*/ 

public function handle($request, Closure $next, ...$roles) 
{ 
    $user = $request->user(); 

    if ($user && $user->isSuperuser($roles)) { 
     return $next($request); 
    } 

    return redirect('/home')->withError('U heeft niet de juiste rechten!'); 

    } 
} 

这里是我的用户模型我isSuperuser方法:

public function isSuperuser(...$roles) 
{ 
    if ($roles) { 
     return $this->roles == $roles; 
    } 

    return $this->roles; 
} 

最后但并非最不重要的我的路线/网页代码中间件:

Route::get('/users', '[email protected]')->middleware(['role:superuser,admin']); 

btw:该方法被称为'isSuperuser'但这只是一个名称。它也必须在某个时候接受角色。

+0

若要应用多个中间件的路线,我认为你必须添加项目到一个数组。 I.e ....->中间件(['role:superuser','role:admin']); – ochhii

回答

0

使用|代替,这样的:

Route::get('/users', '[email protected]')->middleware(['role:superuser|admin']); 
+0

感谢您的回复,但不幸的是它不工作。 – Brnovich