【问题标题】:Multiple middlewares do not work as wanted多个中间件无法按预期工作
【发布时间】:2019-01-25 08:44:52
【问题描述】:

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

我想让 head 使用所有方法,admin 使用大多数方法,moderator 使用一种方法。

Inside InstitutionsController:

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

【问题讨论】:

    标签: laravel routes middleware laravel-5.6 laravel-middleware


    【解决方案1】:

    您需要阅读middleware。它们是操纵 HTTP 请求和响应的类。一个请求进来,一个响应出来。他们一次处理一个。因此,如果您有一个检查角色的中间件,它将检查该角色并在用户没有该角色时抛出“未授权”响应。

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

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

    【讨论】:

    • 你能给我举个例子吗?我了解它的用途,但我不知道当我使用 homecontroller 和方法索引访问路由时,它需要使用 before 方法运行 homepolicy 以检查用户是否是管理员。
    猜你喜欢
    • 2021-11-24
    • 2017-08-27
    • 2020-05-08
    • 1970-01-01
    • 2023-02-14
    • 2015-02-20
    • 2015-09-01
    • 1970-01-01
    • 2013-08-18
    相关资源
    最近更新 更多