Laravel 多个中间件不能按需要工作

Laravel 多个中间件不能按需要工作,laravel,routes,middleware,laravel-5.6,laravel-middleware,Laravel,Routes,Middleware,Laravel 5.6,Laravel Middleware,如果我有3个用户角色(负责人、管理员和主持人): 我想让所有方法的头,管理员对大多数方法和版主对一个方法 机构内部控制员: public function __construct() { $this->middleware('head'); $this->middleware('admin')->only(['index', 'create']); $this->middleware('moderator')->only(['index'])

如果我有3个用户角色(负责人、管理员和主持人):

我想让所有方法的头,管理员对大多数方法和版主对一个方法

机构内部控制员:

public function __construct() {
    $this->middleware('head');
    $this->middleware('admin')->only(['index', 'create']);
    $this->middleware('moderator')->only(['index']);
}
通过这一点,我不能打开作为主持人或管理员访问索引方法,就像头

我怎样才能做到这一点

顺便说一句,我的中间件有:
return!auth()->user()->isAdmin()?redirect()->home():$next($request)
等其他2个,您需要仔细阅读。它们是操纵HTTP请求和响应的类。一个请求进来,一个响应出来。它们一次处理一个。因此,如果您有一个检查角色的中间件,它将检查该角色,并在用户没有该角色时抛出“未经授权”响应

因此,检查用户是否可以做某事不是中间件的工作(如您所发现的)。如果您想检查用户是否可以执行某些操作,请在您的资源周围使用


该文档提供了有关在Laravel应用程序中创建策略和授权操作的更多信息。

您能给我一些示例吗?我了解它的用途,但我不知道它是如何知道当我使用homecontroller和方法索引访问route时,它需要运行homepolicy,然后再检查方法是否为用户管理员。@StupidKid文档解释了所有内容: